算法 排序算法之快速排序
来源:互联网 发布:windows live id注册 编辑:程序博客网 时间:2024/06/08 00:50
package SortArith;/** * 快速排序 * 基本思想: * 通过一趟排序,确定某一关键字最终的位置,以此将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的 * 关键字小,则可分别对这两部分记录继续进行排序,已达到整个序列有序的目的。 * 时间复杂度:O(nlogn) * 空间复杂度:O(nlogn) * 不稳定排序 * * @author lwk * */public class QuickSort { public static void quickSort(int[] array){ if(array == null || array.length == 0){ return; } quickSort(array,0,array.length-1); } public static void quickSort(int[] array,int low,int high){ if(low < high){//若low = high 说明所有元素位置均以确定,退出递归 //首先确定其中一个元素最终排序位置,将数组一分为二 int pos = findPos(array,low,high); //递归再分别排序做左边数组和右边数组 quickSort(array,low,pos - 1); quickSort(array, pos + 1, high); } } public static int findPos(int[] array,int low,int high){ int val = array[low]; //确定array[low]元素的位置 /** * 类似两个指针分别指向数组的首位和末尾 * 末尾指针指向的数字若比val大(或相等),则左移,否则,将末尾指针指向的值赋给首位指针位置,此时开始首位指针移动 * 首位指针指向的数字若比val小(或相等),则右移,否则,将首位指针指向的值赋给末尾指针位置,此时开始末尾指针移动 * 若首位指针与末尾指针重合,循环结束,重合位置即为val元素最终确定位置 */ while(low < high){ //末尾指针指向的数字若比val大(或相等),则左移 //注意:左移过程中也要检查两指针是否已重合 即是否low == high while(low < high && array[high] >= val){ high--; } //否则,将末尾指针指向的值赋给首位指针位置 array[low] = array[high]; //此时开始首位指针移动 //首位指针指向的数字若比val小(或相等),则右移 while(low < high && array[low] <= val){ low++; } //否则,将首位指针指向的值赋给末尾指针位置 array[high] = array[low]; //若此时两指针仍未重合,即low < high,末尾指针继续开始移动 } //low == high处即为指针重合位置,也就是元素val最终确定位置 array[low] = val; return low; }}
0 0
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法 之 快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- sql语句
- 三村合建水厂问题研究
- orcle索引的建立修改及删除
- 地图---CoreLocation框架(学习笔记)
- 全角半角转换
- 算法 排序算法之快速排序
- Android自定义UI实战(基础篇2)---搜索酷炫界面
- 笔记
- Java编程基础-运算符
- Linux下安装配置VSFTP服务器
- krpano户型地图
- android低功耗蓝牙APP开发问题记录
- oracle-其他一些预定义异常
- 迭代Iteratio