快速排序开发的时候使用的比较频繁,平常一般使用jdk的Arrays.sort(int[] array),但jdk的代码很多,现在自己也写一个来试试。
这里要使用递归的方式,先将第一个值取出作为参考,后面每个数都和它进行比较,先从右到左,如果有值比参考值小,就将该数取出,记录下该数位置,把该数放入到第一个位置,然后在从左到右,如果有值比参考数大,将这个值放入到刚刚记录的位置。
public void quickSort(int[] array, int begin, int end) {
if (begin >= end) return;
int low = begin;//低位指针
int high = end;//高位指针
int x = array[low];//取出第一个值,作为比较参考值
boolean direction = true;//true为从右到左
Flag: //标记
while (low < high) {
if (direction) {
//从右到左
for (int i = high; i > low; i--) {
//1、如果高位的值比参考值小,则将高位的值取出,放入到参考值所在的位置,方向改为从左到右
if (array[i] <= x) {
array[low] = array[i];
low++;//低位往右移动一位
high = i;//高位指向i
direction = !direction;//方向相反
continue Flag;
}
}
high = low;//如果都没有的情况下,高位就移动到最低位,
} else {
for (int i = low; i < high; i++) {
//1、如果低位的值比参考值大,则将低位的值取出,放入到参考值所在的位置,方向 改为从左到右
if (array[i] >= x) {
array[high] = array[i];
high--;//高位往右移动一位
low = i;//低位指向i
direction = !direction;//方向相反
continue Flag;
}
}
low = high;//如果都没有的情况下,低位就移动到高位,
}
}
array[low]=x;//最后将参考值放入到自己的位置中
quickSort(array, begin, low-1);
quickSort(array, low+1, end);
}
就这一段。测试一下
int[] array = {5,2,1,4,6,8,3,9,7};
quickSort(array, 0, array.length-1);
for (int i : array) {
System.out.print(i+" ");
}
得到结果,1 2 3 4 5 6 7 8 9
大功告成。