快速排序的本质就是将数组分解成两个数组然后递归调用.
首先找出一个参考值,一般用数组的第一个元素 ,然后从数组右侧找比参考值小的数放在数组左边,从左侧找比参考值大的数放在数组右边,直到左右标记相等.再将参考值写入.
代码如下
val sort = intArrayOf(1,2,45, 34, 8, 90, 54, 99, 80, 40, 58, 88, 1, 79, 39, 32)
/**
*
* @param sort 数组
* @param start 数组第一个下标
* @param end 数组最一位下标
*/
public void quick(int[] sort, int start, int end) {
/**
* 递归条件
*/
if (start >= end) {
return;
}
//这个下标左侧值都比它小,右侧都比这个值大,已经将数组分成两部分
int index= quickSort(sort,start,end);
//递归调用
//index 左边的数组,
quick(sort, start, index - 1);
// //index 右边的数组
quick(sort, index + 1, end);
}
public int quickSort(int[] sort,int start,int end){
//基准值,数组第一个元素
int key=sort[start];
// 循环条件
while (end>start){
//先从右向左找,如果没有比参考值大的数,则指针向左移动
while (end>start && sort[end]>=key){
end--;
}
//找到则将数据调换
sort[start]=sort[end];
//再从左向右找,如果没有比参考值小的数,则指针向右移动
while (end>start && sort[start]<=key){
start++;
}
//找到则将数据调换
sort[end]=sort[start];
}
//这里左右指针相遇 start==end,则将参考值放入此处
sort[start]=key;
return start;
}
//调用
sorts.quick(sort, 0, sort.lastIndex);