快速排序
来源:互联网 发布:linux内核 pdf 编辑:程序博客网 时间:2024/05/02 01:11
edit version : 2017-3-5
最近在全面阅读排序算法,对之前的快速排序博文做下补充优化。
由于是借鉴csdn,cnblogs等多个博文,在此注明转载,不一一列举。
//quick sort//交换子表的记录,使枢轴记录到位,并返回枢轴所在的位置 private static int Partition(int array[], int low, int high){ /*三数中值分割法*/ int m = low + (high - low) / 2;//数组中间元素的下标 if (array[low]>array[high]) //保证左端较小 swap(array, low, high); if (array[m] > array[high]) //保证中间较小 swap(array, high, m); if (array[m] > array[low]) swap(array, m, low); //保证左端最小 //此时array[low]已经为整个序列左中右三个关键字的中间值 int pivotkey = array[low]; /*固定基准元 int pivotkey = array[low]; */ /*随机基准元 int randomIndex = rand() % (high - low) + low;//取数组中随机下标 swap(array, randomIndex, low); //与第一个数交换 int pivotkey = array[low]; */ int i = low, j = high; while(i<j) //从表的两端交替向中间扫描,当没有相遇 { while (array[j] >= pivotkey&&i<j){ j--; } while (array[i] <= pivotkey&&i<j){ i++; } if (i<j) { swap(array, i, j); } } //最终将基准数归位 swap(array, low, i); return i; //返回枢轴所在的位置 } private static void qSort(int array[], int low, int high){ int pivot; if (low<high) { pivot = Partition(array, low, high);//算出枢轴值 qSort(array, low, pivot - 1); //对低子表递归排序 qSort(array, pivot + 1, high); //对高子表递归排序 } } //对array做快速排序 public static int[] quickSort(int array[]){ qSort(array, 0, array.length-1); return array;}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- mysql limit分页查询效率
- poj 2777 Count Color
- 编译过程
- mybatis调用mysql存储过程,带结果集
- 快速排序
- MyEclipse8.6安装svn
- 软件开发设计文档模版
- linux 忘记mysql root密码
- 怎样理解Servlet的单实例多线程
- $emit/$broadcast/$on用法
- Android Studio中关于修改包名的相关问题
- Shell脚本自动修改Linux网卡地址、IP地址配置、主机名修改
- Storm Distributed RPC(DRPC)分布式远程过程调用