优化的快速排序
来源:互联网 发布:phpmyadmin for mac 编辑:程序博客网 时间:2024/05/18 00:03
//快速排序void Swap(int &a, int &b){//a ^= b;//b ^= a;//a ^= b;int temp;temp = a;a= b;b = temp;}int Median3(int a[], int Left, int Right){int Center = (Left+Right)/2;//将左中右三个值排序if(a[Left] > a[Center]){Swap(a[Left], a[Center]);}if(a[Left] > a[Right]){Swap(a[Left], a[Right]);}if(a[Center] > a[Right]){Swap(a[Center], a[Right]);}//将中值放在倒数第二个位置并作为枢纽元返回Swap(a[Center], a[Right-1]);return a[Right-1];}void InsertionSort(int a[], int n){int temp ;for(int i = 1; i < n; ++i){int j;temp = a[i];for(j = i; j >0 && temp < a[j-1]; --j) //a[j]前的序列都是排好序的,在找到那个比a[j]小的值前,遍历过的值都向后挪1位{a[j] = a[j-1];}a[j] = temp;}}void quickSort(int a[], int Left, int Right){int i, j, Pivot;if(Left +3 <= Right) //当元素个数较少时,使用插入排序比快速排序要快,{Pivot = Median3(a, Left, Right);/*int m = a[0];int n = a[7];*/i = Left;j = Right-1;for(;;) //找到a[i]大于枢纽元的位置和a[j]小于枢纽元的位置并交换两个位置,一直进行直到i大于j退出{while(a[++i] < Pivot) {}while(a[--j] > Pivot) {}if(i < j)Swap(a[i], a[j]);elsebreak;}//退出for循环时,a[i]的值大于枢纽元并且位置在a[j]左边,故a[i]与枢纽元交换, 则此时枢纽元左边的都是较小值,右边都是较大值.Swap(a[i], a[Right-1]); quickSort(a, Left, i-1);quickSort(a, i+1, Right);}else{InsertionSort(a+Left, Right-Left+1);}}void QuickSort(int a[], int n){quickSort(a, 0, n-1);}
0 0
- 快速排序的优化
- 快速排序的优化
- 优化的快速排序
- 快速排序的优化
- 快速排序的优化
- 快速排序的优化
- 快速排序的优化
- 快速排序的优化
- 优化的快速排序
- 快速排序的优化
- 快速排序的优化
- 快速排序的优化
- 快速排序的优化算法
- 没有优化的快速排序
- 快速排序过程的优化
- java快速排序的优化
- 起泡排序的进一步优化:快速排序
- 三种快速排序以及快速排序的优化
- Poj 2482 Stars in Your Window
- 数据缓存设计方案-------一致性哈希
- 快速排序
- Speex编解码在Android上实现
- Android Studio下简单编译AIDL方法
- 优化的快速排序
- lightoj 1031 - Easy Game 博弈类区间DP
- Java EE 项目启动加载顺序
- 桶式排序
- 穷举法猜数字
- ObservableCollection<T>类
- mysql之root密码问题
- java中List集合的遍历和两种实现类的比较分析
- C++反汇编与逆向分析之数据类型的基本表现学习笔记