java排序之 --- 快速排序
来源:互联网 发布:淘宝淘口令有危险吗 编辑:程序博客网 时间:2024/05/22 14:21
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
举个小例子如图片所示(摘自百度图片):
每一次选取每部分的第一个元素作为关键数据 key,从每部分的最后一个元素开始找,找到第一个比 key 小的元素,再从头开始找,找到第一个不比 key 小的元素,然后两两交换位置,直到 key 的左边元素都小于它,右边的元素都大于或等于它。再递归比较 key 的左右两边部分从而得到排好序的序列。
核心代码:
/** * 把数组按关键元素 key 分割成左边小于 key,右边大于key 的两部分 * @param arr 待排序数组 * @param start 待排序部分的起始位置 * @param end 带排序部分的结束位置 * @return * @throws Exception */ public int partition(int[] arr,int start,int end) throws Exception { if(arr == null || arr.length <= 0 || start < 0 || end >=arr.length) { throw new Exception("Invalid Parameters"); } int key = arr[start]; //选取并保存待排序部分的第一个元素为 key while(start < end) { //保证起始位置始终小于结束位置 while(arr[end] >= key && end > start) { //从后开始查找小于等于 key 的元素 end--; //小于 key 的元素的下标 } arr[start] = arr[end]; //把小于 key 的元素移动到 >= key 的位置 while(arr[start] <= key && end > start) { //从头开始查找大于等于 key 的元素 start++; //大于 key 的元素的下标 } arr[end] = arr[start]; //把大于 key 的元素移动到 <= key 的位置 } arr[end] = key; //把 key 移动到最后一个小于 key的元素位置 return end; //返回分割好后的 key 的下标 } /** * * @param arr * @param start * @param end * @throws Exception */ public void quickSort(int[] arr,int start,int end) throws Exception { if(start == end) return; int index = partition(arr, start, end); if(index > start) { quickSort(arr, start, index-1); } if(index < end) { quickSort(arr, index+1, end); } }
快速排序是一种不稳定的排序算法,其算法的平均时间复杂度和最优时间复杂度都是
阅读全文
0 0
- java排序之快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java 排序之 快速排序
- Java排序之【快速排序】
- java排序之 --- 快速排序
- 快速排序之Java
- java之快速排序
- java之快速排序
- java之快速排序
- Java之快速排序
- 排序算法之快速排序(JAVA)
- java排序之壹------快速排序代码
- Java排序算法之快速排序
- Java排序之快速排序(2)
- 交换排序之快速排序Java实现
- java排序之快速排序(五)
- 排序算法之快速排序Java版
- 大整数类-高精度模板
- vim分屏功能总结
- 一行代码解决QQ互联避免跨域报错
- 单词翻转
- 数值统计
- java排序之 --- 快速排序
- ThinkPHP3.2设置404跳转页面
- tomcat配置Https
- 逆流而上读书笔记1
- Jedis操作Redis--String类型
- CMake targets with detailed dependencies
- 对fork()函数的一点理解
- 第二次迭代总结
- 【SpringMVC】控制器