快速排序C++实现

快速排序是对冒泡排序的一种改进,冒泡排序一次只能移动一次,而快速排序一次就能将大于轴值的数移动到轴值的后面(升序),减少了移动的次数

#include
using namespace std;
int oneSort(int a[],int x,int y);  //一次划分函数
void qSort(int a[],int,int);   //快速排序函数
int main(){
    int a[]={3,6,5,9,7,1,8,2,4};
    //int a[]={1,2,3,4,5,6,7,8,9};
    int n=sizeof(a)/sizeof(int);
    qSort(a,0,n-1);
    for(int i=0;i        cout<    cout<    return 0;
}
int oneSort(int a[],int x,int y){
    int i=x;  //i从左往右走
    int j=y;  //j从右往左走
    int tmp=a[x];   //把第一个数当轴值,保存到tmp中
    while(i        while(tmp               j--;
        if(i            a[i]=a[j];  //此时tmp>a[j],将a[j]的值赋值给a[i],然后i++
            i++;
        }
        while(a[i]            i++;
        if(i            a[j]=a[i];  //此时tmp                        //a[j],然后j--
            j--;
        }
    }
    a[i]=tmp; //最后i,j的位置的值就是轴值所在的值tmp,此时,
                //i左边的值都比tmp小,i右边的值都比tmp大,
                //完成一次划分
    return i; //返回i的位置,然后对i左边和右边递归进行划分
}
void qSort(int a[],int x,int y){
    if(x        int k=oneSort(a,x,y); //取得一次划分的轴值,再对轴
                        //值左右边进行递归划分
        qSort(a,x,k-1);
        qSort(a,k+1,y);
    }
}

你可能感兴趣的:(c和c++)