什么是快速排序:
选取一个中间数(或者称为基准数,叫什么不重要,姑且称之为key),然后将数组分为两部分。这两部分的特点是什么呢?左边的部分全部小于key,右边部分全部大于key。然后key的左边、右边分别重复这一动作,完事!
甚至从上面的理解性的话里面都可以看出来,while,if判断,递归。没了。
加深理解:
1.拿到一个基准数key,先从右边开始找一个小于key的,再从左边找一个大于key的,互相交换位置。这样第一组左边小于key右边大于key的数就出来了。
2.在key处,分为两个数组,分别进行第一步。完事。
public class kuaipai {
public static void main(String[] args) {
int[] array = {9,8,7,33,53,12,5,2,1};
sort(array, 0, array.length-1);
for(int i = 0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
}
public static void sort(int[] array,int low,int high) {
if (low>high) {
return;
}
int i = low;
int j = high;
//基准
int key = array[low];
while (i<j) {
while (i<j&&array[j]>=key) {
j--;//从右往左
}
while (i<j&&array[i]<=key) {
i++;//从左往右
}
//如果满足条件,交换
if (i<j) {
int p = array[j];
array[j] = array[i];
array[i] = p;
}
}
//将基准和i、j值相等的地方交换
array[low] = array[i];
array[i] = key;
//递归左边
sort(array, low, j-1);
//递归右边
sort(array, j+1, high);
}
}