快排思想
1、确定基数key,默认最左边第一个
2、比基数key大的值放在右边
3、比基数key小的值放在左边,分割成两个区域
4、对两个子区域分别递归排序
注意:在快排当中一定要判断 left < right ,不然排序过头了,
代码
public static void main(String[] args) {
int[] array = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8,15,29,12,34,11};
quicklySort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array));
}
public static void quicklySort(int[] array, int start, int end) {
if (start > end) return;
int left = start, right = end, temp = 0, key = array[left];
while (left < right) {
// 确定右边比基数6小的数的下标
while (array[right] >= key && left < right) {
right--;
}
// 确定左边比基数6大的数的下标
while (array[left] <= key && left < right) {
left++;
}
// 交换这两个数
temp = array[left];
array[left] = array[right];
array[right] = temp;
}
// 将基数置换到中间位置,分割成两个区域
array[start] = array[left];
array[left] = key;
quicklySort(array,start,left-1);
quicklySort(array,left+1,end);
}