时间复杂度:O (nlogn)
原理:随机选一个数(一般取 arr[0]),和其他数据比较,大的放这个数的右边,小的放这个数的左边
4 | 2 | 1 | 7 | 9 | 3 |
i | j |
i = 最小下标,j = 最大下表。
取的标准 key = arr[0] = 4
开始:arr[ j ] < key 交换 ,j--
3 | 2 | 1 | 7 | 9 | 4 |
i | j |
arr[ i ] < key 不变 ,i++;
3 | 2 | 1 | 7 | 9 | 4 |
i | j |
arr[ i ] < key 不变 ,i++;
3 | 2 | 1 | 7 | 9 | 4 |
i | j |
arr[ i ] < key 不变 ,i++;
3 | 2 | 1 | 7 | 9 | 4 |
i | j |
arr[ i ] > key 交换 ,i++;
3 | 2 | 1 | 4 | 9 | 7 |
i , j |
这就比完了一轮,4 左边的都比4小,4右边的都比4大,之后通过 递归 继续对4左边 和4 右边进行排序
代码实现:
使用 java 语言:
/**
* 快速排序
* @param arr
* @param low
* @param high
*/
public static void quickSort(int[] arr, int low, int high) {
int i = low;
int j = high;
int key = arr[low];
while (i < j) {
while (arr[j] >= key && i < j) {
j--;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
while (arr[i] <= key && i < j) {
i++;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
j--;
}
}
if(i>low)quickSort(arr,low,i-1); //递归调用
if(j<high) quickSort(arr, i + 1, high);
}