思路分析
运用递归实现:
1.先找到一个基准数,通常是第一位。
2.一次数组遍历中比基准数小的放在数组左边,大的放在右边。
3.递归基准数左半边 和 右半边,直到left下标大于right下标。
快排图示
时间复杂度
1.平均:O(nlog2n)。
2.最坏:O(n²)。
3.最好:O(nlog2n)。
4.稳定性:不稳定。
代码实现
private void quiteSort(int[] arr, int left, int right) {
// 递归退出条件
if(left > right) return;
// 1. 找到基准数,并记录下标
int baseNumber = arr[left];
int start = left;
int end = right;
while(left != right){
// 2. 从右找比基准数小的
while(arr[right] >= baseNumber && left < right) --right;
// 3. 从左找比基准数大的
while(arr[left] <= baseNumber && left < right) ++left;
// 4. 交换左右
swap(arr, left, right);
}
// 5. 基准数归位
swap(arr, start, left);
// 递归左右两边
quiteSort(arr, start, left - 1);
quiteSort(arr, left + 1, end);
}
public static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}