快速排序 Java

xiaoxiao2021-02-28  132

1 排序原理

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。其为冒泡排序的优化

2 时间复杂度

O(logn*n) 最坏时间复杂度:O(n^2)

3 实现

/** * 快速排序 * * @author xld * */ public class QuickSort { public static void sort(int[] arr) { int n = arr.length; sort(arr, 0, n - 1); } private static void sort(int[] arr, int l, int r) { if (l > r) return; int p = partition(arr, l, r); sort(arr, l, p -1); sort(arr, p + 1, r); } private static int partition(int[] arr, int l, int r) { int v = arr[l]; // arr[l+1...j] < v ; arr[j+1...i) > v // 索引j分区 ,j之前的索引为小于arr[v]的元素,大于j的索引为大于arr[v]的元素 int j = l; for (int i = l+1; i <= r; i++) { // 如果arr[i]小于v 则将其转移到j之前的位置 如果大于,则不用动,因为j到i-1为大于arr[v]的位置 if (arr[i] < v) { j++; swap(arr, j, i); } // 最后 将l-->即表定点 和最后一个小于v的元素交换位置 } swap(arr, l, j); // 返回v表定点的下标 作为下次分组的节点 return j; } private static void swap(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } // 测试InsertionSort public static void main(String[] args) { int[] arr = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; QuickSort.sort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); System.out.print(' '); } System.out.println(); } }
转载请注明原文地址: https://www.6miu.com/read-37438.html

最新回复(0)