/**
* 快速排序其实也是冒泡排序的一种,就是交换值
* 思想:随便的挑出一个关键字,通过交换把数组分成2部分,左边是小于关键字的数组,右边是大于关键字的数组
* 然后对这2个数组再进行类似的排序,每次都会把数组分成2部分,知道数组的大小变成1就完成排序。
* 最后的数组也就是一个有序的数组了。(中间还有一些递归的知识)
*
* 快速排序其实也是冒泡排序的一种,就是交换值
* 思想:随便的挑出一个关键字,通过交换把数组分成2部分,左边是小于关键字的数组,右边是大于关键字的数组
* 然后对这2个数组再进行类似的排序,每次都会把数组分成2部分,知道数组的大小变成1就完成排序。
* 最后的数组也就是一个有序的数组了。(中间还有一些递归的知识)
*
* */
public static void quickSort(int[] array, int low, int high) {
if (low<high) {
int pivotloc = partition(array, low, high);
quickSort(array, low, pivotloc-1);
quickSort(array, pivotloc+1, high);
}
}
private static int partition(int[] array, int low, int high) {
int pivotkey = array[low];
while(low<high) {
while(low<high&&array[high]>=pivotkey) {
--high;
}
// 右边出现小于关键值的数就要进行交换
array[low] = array[high];
while(low<high&&array[low]<=pivotkey) {
++low;
}
array[high] = array[low];
}
// 最后定的返回值low=high
array[low] = pivotkey;
return low;
}
public static void main(String[] args) {
int[] a = {49,38,65,97,76,13,27,49};
quickSort(a, 0, a.length-1);
System.out.print(Arrays.toString(a));
}