快速排序法
2018-02-25 16:14
148 查看
快速排序法
代码块
快速排序法,例如:public class QuickStore { /* * * 快速排序 * * 思想: * 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小, * 则可以分别对这两部分记录继续进行排序,已达到整个序列有序的目的 * * 本质就是,找一个基位(枢轴,分水岭,作用是左边的都比它小,右边的都比它大.可随机,取名base * 首先从序列最右边开始找比base小的 * ,如果小,换位置,从而base移到刚才右边(比较时比base小)的位置(记为临时的high位),这样base右边的都比base大 * 然后,从序列的最左边开始找比base大的 * ,如果大,换位置,从而base移动到刚才左边(比较时比base大)的位置(记为临时的low位),这样base左边的都比base小 * * 循环以上两步,直到 low == heigh, 这使才真正的找到了枢轴,分水岭. 返回这个位置,分水岭左边和右边的序列,分别再来递归 */ public static int[] quickSort(int[] arr, int low, int heigh) { if(low < heigh) { int division = partition(arr, low, heigh); quickSort(arr, low, division - 1); quickSort(arr, division + 1, heigh); } return arr; } // 分水岭,基位,左边的都比这个位置小,右边的都大 private static int partition(int[] arr, int low, int heigh) { int base = arr[low]; //用子表的第一个记录做枢轴(分水岭)记录 while (low < heigh) { //更改下面两个while循环中的<=和>=,即可获取到从大到小排列 //从表的两端交替向中间扫描,从小到大排列 while (low < heigh && arr[heigh] >= base) { heigh--; } // 如果高位小于base,base 赋值给 当前 heigh 位,base 挪到(互换)到了这里,heigh位右边的都比base大 swap(arr, heigh, low); while(low < heigh && arr[low] <= base) { low++; } // 如果低位大有base, swap(arr, heigh, low); } print(arr,7); //现在low=heigh return low; } //交换大小 private static void swap(int[] arr, int heigh, int low) { int temp = arr[heigh]; arr[heigh] = arr[low]; arr[low] = temp; } static void print(int a[], int n){ for(int j= 0; j<n; j++){ System.out.print("<<"+a[j]); } System.out.println("-------------"); } public static void main(String[] args) { //int a[] = {8,1,5,3,2,4,9,6,10,7}; int a[] = {49,38,65,97,76,13,27}; print(a,7); quickSort(a,0,6); print(a,7); } }
相关文章推荐
- C#排序算法——快速排序法
- 花了好长一段时间,终于把快速排序法弄懂了。
- 排序法系列之五---快速排序法(C++代码实现)
- 快速排序法
- 快速排序法 QuickSort
- 算法之“快速排序法”初始认识
- java语言快速排序法
- IOS 快速排序法
- php 二维数组排序比较 2 —— 快速排序法 分类: php 二维数组排序 快速排序 2014-06-24 11:39 190人阅读 评论(0) 收藏
- 快速排序法
- 【算法】快速排序法:Quicksort
- 算法:快速排序法
- 快速排序法的总结
- 快速排序法
- 快速排序法从小到大排序
- 快速排序法的python实现
- php四种基础算法:冒泡,选择,插入和快速排序法
- 快速排序法 java实现 三种方法实现
- Java算法----快速排序法
- 快速排序法详解