算法之快速排序
来源:互联网 发布:java中迭代器的使用 编辑:程序博客网 时间:2024/04/28 20:55
原理
快速排序是一种常用的排序算法,比选择排序快得多。快速排序采用递归的方法,因此,基线条件为数组为空或只包含一个元素。在这种情况下,只需原样返回数组——根本就不用排序。对于长度超过1的数组则要使用分而治之的思想,因此需要将数组分解,直到满足基线条件。
步骤如下:
首先,从数组中选择一个元素,这个元素被称为基准值(pivot)。
找出比基准值小的元素以及比基准值大的元素。这被称为分区(partitioning)。
对这两个子数组(小于基准值的元素和大于基准值的元素)进行快速排序。
注意:快速排序的性能高度依赖于你选择的基准值。所以快速排序的时间复杂度的区间为:最糟情况O(n2 )——最佳情况O(nlogn)
代码
public class QuickSortDemo { public static void main(String[] args) { List<Integer> list = Arrays.asList(0, 2, 4, 6, 8, 1, 3, 5, 7, 9); list.forEach(item -> { System.out.println(item); }); System.out.println("-----------------------------------"); List<Integer> result = quickSort(list); result.forEach(item -> { System.out.println(item); }); } public static List<Integer> quickSort(List<Integer> list) { if (list == null || list.size() < 2) { //基线条件:为空或只包含一个元素的数组是“有序”的 return list; } int pivot = list.get(0); //基准值 List<Integer> less = list.stream().filter(item -> item < pivot).collect(Collectors.toList()); //由所有小于基准值的元素组成的子数组 List<Integer> greater = list.stream().filter(item -> item > pivot).collect(Collectors.toList()); //由所有大于基准值的元素组成的子数组 //合并并返回 List<Integer> result = quickSort(less); result.add(pivot); result.addAll(quickSort(greater)); return result; }}
0 0
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- [算法]之快速排序
- 算法之--快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- 排序算法 之 快速排序
- 排序算法之快速排序
- 排序算法之快速排序
- Android内存优化一:内存分析工具 MAT 的使用
- 1023. 组个最小数 (20)
- 11 网络管理 dns dhcp.
- C#中Dictionary<TKey,TValue>排序方式
- centos 6.5下使用中文输入法
- 算法之快速排序
- 小技巧
- 哈希表原理
- 0408
- Android AlterDialog的用法
- python图像处理_色彩转换
- Keyboard Row
- Android Studio快捷键
- Android内存优化三:对Bitmap的内存优化