快速排序的思想:

选择一个基准元素,比基准元素小的放基准元素的前面,比基准元素大的放基准元素的后面,这种动作叫分区,每次分区都把一个数列分成了两部分,每次分区都使得一个数字有序,然后将基准元素前面部分和后面部分继续分区,一直分区直到分区的区间中只有一个元素的时候,一个元素的序列肯定是有序的嘛,所以最后一个升序的序列就完成啦

但是关于基准元素的选择有两种

1.第一种是每次都选序列的子序列的第一个元素(有缺陷)

2.第二种是每次都选择子序列中的第x个元素,x随机

普通快速排序

代码如下:

 

#include<bits/stdc++.h>
using namespace std;
#define n 5
int a[n];
void swap_t(int a[],int i,int j)
{
    int t=a[i];
    a[i]=a[j];
    a[j]=t;
}
int par(int a[],int p,int q)
{
    int i=p;//p是轴
    int x=a[p];//基准元素
    for(int j=p+1;j<=q;j++)
    {
        if(a[j]<=x)//升序
        {
            i++;
            swap_t(a,i,j);
        }
    }
    swap_t(a,p,i);
    return i;//轴位置
}
void QuickSort(int a[],int p,int q)
{
    if(p<q)//序列中元素个数大于1
    {
        int r=par(a,p,q);
        QuickSort(a,p,r-1);
        QuickSort(a,r+1,q);
    }
}
int main()
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    QuickSort(a,0,n-1);
    for(i=0;i<n;i++)
    {
        printf("%d\n",a[i]);
    }
    return 0;
}
View Code

相关文章:

  • 2021-05-16
  • 2022-12-23
  • 2021-11-30
  • 2021-12-05
  • 2021-12-02
  • 2021-12-03
  • 2021-11-04
猜你喜欢
  • 2021-11-26
  • 2021-11-04
  • 2021-12-05
  • 2020-10-04
  • 2019-02-17
  • 2021-10-11
相关资源
相似解决方案