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];
int j = l;
for (int i = l+1; i <= r; i++) {
if (arr[i] < v) {
j++;
swap(arr, j, i);
}
}
swap(arr, l, j);
return j;
}
private static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
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();
}
}