快速排序,先找到對比數據,然後遍歷其它元素,大於對比數據的放到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())); } }