Java排序算法 快速排序
/**
*
* @param arr 数组
* @param lowIndex 低指数 = 0
* @param highIndex 高指数 = 类似于arr.length-1
*/
public static void quickSort(int[] arr, int lowIndex, int highIndex) {
// 递归 结束条件 必须要有
if (lowIndex > highIndex) {
return;
}
// 基准数 这里我是取数组中的首个 可随意在数组中取一个为基准数
int base = arr[lowIndex];
int left = lowIndex;
int right = highIndex;
while (left < right) {
// 先看右边,依次往左递减 因为基准数是定的数组最左边的 相反则反
while (base <= arr[right] && left < right) {
right--;
}
// 再看左边,依次往右递增
while (base >= arr[left] && left < right) {
left++;
}
// 如果满足条件则交换
if (left < right) {
int temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
}
}
// 最后将基准为与i和j相等位置的数字交换
arr[lowIndex] = arr[left];
arr[left] = base;
// 递归调用左半数组
quickSort(arr, lowIndex, right - 1);
// 递归调用右半数组
quickSort(arr, right + 1, highIndex);
}
@Test
public void quickSortTest() {
int[] arr = { 10, 7, 2, 4, 7, 62, 3, 4, 2, 1, 8, 9, 19 };
quickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.err.println(arr[i]);
}
}
本文章只保留代码及部分注释,可直接使用,并没有做具体的算法过程讲解。如有不合理地方请包涵指明。