快速排序实现

来源:互联网 发布:公务员照片修改软件 编辑:程序博客网 时间:2024/06/08 16:32
/*快速排序复杂度O(N*LogN),可以理解为挖坑填数 + 分治法。基本思想:1、先从数列中取出一个数作为基准数,2、划分区间过程,将比这个数大的数全放在它的右边,小于或等于它的数全放在它的左边3、再对左右区间重复第二步,直到各区间只有一个数。对挖坑填数进行总结:1、i = L,j = R;将基准数挖出形成第一个坑a[i];2、j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i];3、i++由前向后找比它大的数,找到后挖出此数填前一个坑a[j];4、再重复执行2、3两步,直到i==j,将基准数填入a[i]中*/#include <iostream>using namespace std;//返回基准数下标int arraySort(int a[], int l, int r){    //初始化变量    int i = l;    int j = r;    int x = a[l];    //循环检测    while(i < j)    {        //从后向前找比x小的数        while(i < j && a[j] >= x)        {            --j;        }        //判别确定是否在i后面存在比x小的a[j]        if(i < j)        {            a[i] = a[j];            ++i;        }        //从前向后找比x大的数        while(i < j && a[i] < x)        {            ++i;        }        if(i < j)        {            a[j] = a[i];            --j;        }    }    a[i] = x;    return i;}//快速排序void quick_sort(int a[], int l, int r){    if(l < r)    {        int i = arraySort(a, l, r);        //递归调用        quick_sort(a, l, i - 1);        quick_sort(a, i + 1, r);    }}/*//综合版本void quick_sort(int a[], int l, int r){    //初始化    int i = l;    int j = r;    int x = a[l];    if(l < r)    {        while(i < j)        {            while(i < j && a[j] >= x)            --j;            if(i < j)            a[i++] = a[j];            while(i < j && a[i] < x)            ++i;            if(i < j)            a[j--] = a[i];        }        a[i] = x;        quick_sort(a, l, i - 1);        quick_sort(a, i + 1, r);    }}*/void Test(char TestName[], int a[], int l, int r){    if(TestName != NULL)    cout << TestName << ":" << endl;    quick_sort(a, l, r);    for(int i = 0; i <= r; ++i)    cout << a[i] << " ";}void Test1(){    int a[] = {7 ,13, 6 ,12, 9, 0};    Test("Test1", a, 0, sizeof(a) / sizeof(int) - 1);}int main(){    Test1();    return 0;}




原创粉丝点击