快速排序实现
来源:互联网 发布:公务员照片修改软件 编辑:程序博客网 时间: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;}