过程
我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边,所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。也就是说,我们无需再移动中轴元素的位置。
从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中轴元素),接着我们通过递归的方式,让中轴元素左边的数组和右边的数组也重复同样的操作,直到数组的大小为1,此时每个元素都处于有序的位置。
动图展示
 
代码实现
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 
 | 
 
 
 public class QuickSort {
 
 public static void quickSort(int[] arr, int left, int right) {
 if (left < right) {
 
 int pivot = arr[left];
 int i = left + 1;
 int j = right;
 while (true) {
 
 while (i <= j && arr[j] >= pivot) j--;
 
 while (i <= j && arr[i] <= pivot) i++;
 if (i >= j) {
 break;
 }
 
 int temp = arr[i];
 arr[i] = arr[j];
 arr[j] = temp;
 }
 arr[left] = arr[j];
 
 arr[j] = pivot;
 
 quickSort(arr, left, j - 1);
 
 quickSort(arr, j + 1, right);
 }
 }
 
 public static void main(String[] args) {
 int[] arr = {2, 5, 3, 1, 4, 6};
 quickSort(arr, 0, arr.length - 1);
 System.out.println(Arrays.toString(arr));
 }
 
 }
 
 | 
性质:
- 时间复杂度:O(nlogn)
- 空间复杂度:O(logn)
- 非稳定排序
- 原地排序
参考