排序--快排

快排的几个基本要点:

1 找基准值,这里需要说明的是一般选取数组的首地址元素作为基准值 所以在进行函数调用时要去从第二个取起;

2 用基准值把数据分为三块,一块为小于基准值的,另一块为大于基准值的,而中间的那个 部分则作为基准值的移动数据(或者是比较数据)直到分成三块(第二块只有基准值);

3 实现上面的部分只是完成了第一次的分配,然后把除基准值的两部分分别重新调用函数 4 这就是所谓的快排!!!

#include<iostream>
#define N 11
using namespace std;
int main()
{
    void QuickSort(int [],int ,int );
    int a[N];
    for(int i=1;i<N;i++)
    cin>>a[i];
 
    QuickSort(a,1,N-1);
    for(int i=1;i<N;i++)
    cout<<a[i]<<" ";
    return 0;
}
void QuickSort(int s[],int start,int end)
{
    int i,j;
    i=start;
    j=end;
    s[0]=s[start];//设定基准值
    while(i<j)
{
    while(i<j&&s[0]<s[j])
    j--;//位置左移
    if(i<j)//凡是满足上述条件进行位置调换;
    {
        s[i]=s[j];
        i++;
    }
     while(i<j&&s[i]<=s[0])
     i++;
     if(i<j)
     {
         s[j]=s[i];
         j--;
     }
}
    s[i]=s[0];//确定基准值得位置
    if(i>start)
    QuickSort(s,start,j-1);
    if(i<end)
    QuickSort(s,j+1,end);
}
原文地址:https://www.cnblogs.com/yaobolove/p/4108080.html