快速排序
快速排序:典型的比较排序
package org.study.order;
import java.util.Arrays;
public class QuickSort01 {
public static void main(String[] args) {
int[] array = {5, 2, 9, 1, 10, -1, 199, 11, 3, 0, -3, 43, 20};
quickSort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
public static void quickSort(int[] arr, int begin, int end) {
if (begin < end) {
int index = getIndex(arr, begin, end);
quickSort(arr, begin, index - 1);
quickSort(arr, index + 1, end);
}
}
private static int getIndex(int[] arr, int begin, int end) {
//首先备份开始的轴点元素
int pivot = arr[begin];
while (begin < end) {//重叠了就是找到了真正的轴点
while (begin < end) {
//开始是从右往左
if (pivot < arr[end]) { //从右往左 右边的元素大于轴点元素
end--;
} else {
arr[begin] = arr[end]; //用右边较小的值覆盖掉左边较大的值,begin++,轴点变换为end,然后方向更换为begin++后的坐标的值与arr[end]去比较了
begin++;
break; //该换方向 让左边的元素与轴点语速比较了
}
}
while (begin < end) {
if (pivot > arr[begin]) {//从左往右
begin ++;
} else {
arr[end] = arr[begin];
end --;
break; //该换方向 从右往左了
}
}
}
//当找到合适的位置以后,就用备份的粥店元素覆盖到真正的轴点
arr[begin] = pivot;
//返回轴点元素的位置
return begin;
}
}
程序改变世界