快速排序及Java实现
2017-03-02 12:51
183 查看
算法概念
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
算法思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现思路
①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
③重复第①、②步,直到左区处理完毕。
算法实现
此处采用三数中值分割法,即关键字由(start + end) / 2 得到。
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
算法思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现思路
①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
③重复第①、②步,直到左区处理完毕。
算法实现
此处采用三数中值分割法,即关键字由(start + end) / 2 得到。
/** * 快速排序 * 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod) * 此处采用三数中值分割法 * * @param a * @return */ public static void quickSort(int[] a, int start, int end) { if (end <= start) { return; } int center = (start + end) / 2; int i = start; int j = end; while (i < j) { int tmp; if (a[i] > a[j]) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } if (a[i] > a[center]) { tmp = a[i]; a[i] = a[center]; a[center] = tmp; } i++; if (a[j] < a[center]) { tmp = a[j]; a[j] = a[center]; a[center] = tmp; } j--; } if (end - start == 1) { return; } quickSort(a, start, center); quickSort(a, center, end); } public static void main(String[] args) { int[] a = {5, 10, 4, 6, 9, 3, 2, 7, 10, 11}; quickSort(a, 0, a.length - 1); for (int i : a) { System.out.print(i + ","); } }
相关文章推荐
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 算法导论Java实现-快速排序(第七章)
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- 快速排序原理及java实现
- java 中提供的默认的快速排序的实现
- 交换排序之快速排序(java实现)
- 《算法导论的Java实现》 8 快速排序
- java实现快速排序
- java实现快速排序
- 快速排序的Java实现
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- java实现快速排序
- 递归分治法在快速排序中的应用 java以界面的方式实现
- 排序算法复习(Java实现)(三): 插入,冒泡,选择,Shell,快速排序
- 排序算法复习(Java实现): 插入,冒泡,选择,Shell,快速排序
- 用JAVA实现排序算法之四:快速排序
- java实现快速排序
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)