看到网上一些快速排序算法实现,好像大部分不能成功运行,在调整数据和目标靶向值归位的地方都有些corner case不能覆盖,遂自己实现了一版,记录如下:
package dsa;
import java.util.Arrays;
/**
* 快速排序的核心思想是分治和递归,可以平均达到类似二分查找的时间复杂度
* 解题思路:
* 1)递归的终止条件 l >= r
* 2) 选定一个靶向值,然后进行调整,大于靶向值的都移到该值右边,小于靶向值的都移到左边,靶向值移到分割位置
* 3)然后在分隔位置左右分别进行递归
*/
public class quickSort {
public static void sort(int[] array, int l, int r) {
//1、递归的终止条件
if (l >= r) {
return;
}
//2、选定靶向值进行调整
int x = array[r], i = l - 1;
for (int j = l; j < r; j++) {
if (array[j] <= x) {
swap(array, ++i, j); //顺序进行调整,不容易出错,统一小的都移动到左边
}
}
swap(array, i + 1, r); //靶向值放到正确位置
//3、递归
sort(array, l, i); //左递归
sort(array, i + 1, r); //右递归
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static vo