快速排序,先找到对比数据,然后遍历其它元素,大于对比数据的放到more集合,小于对比数据的放到less集合,再对more集合和less集合排序
最大运行时间O(n2)
平均运行时间O(nlogn)
数据量很大的情况下,快速排序是灾难性的,数据量小的情况下,效率很高
/** * @author: krauser * @date: Create in 上午11:48 2017/12/28 * @Description: * * 快速排序 找到基准条件 和 递归条件,大的分一边,小的分一边 * */ public class QuicksortDemo { public List<Integer> quickSort(List<Integer> sortArray) { if (sortArray.size() < 2) { return sortArray; } else { int val = sortArray.get(0); List<Integer> less = new ArrayList<>(); List<Integer> more = new ArrayList<>(); for (int i = 1; i < sortArray.size(); i++) { if (val > sortArray.get(i)) { less.add(sortArray.get(i)); } else { more.add(sortArray.get(i)); } } List<Integer> result = quickSort(more); result.add(val); result.addAll(quickSort(less)); return result; } } public static void main(String[] args) { QuicksortDemo quicksortDemo = new QuicksortDemo(); List<Integer> list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { Random random = new Random(); list.add(random.nextInt(1000)); } System.out.println("转换前:" + Arrays.toString(list.toArray())); long start = System.currentTimeMillis(); list = quicksortDemo.quickSort(list); System.out.println("快速排序总共花费:" + (System.currentTimeMillis() - start) + "ms"); System.out.println("转换后:" + Arrays.toString(list.toArray())); } }