1、选出一个key,一般是最左边或是最右边的。
2、定义一个begin和一个end,begin从左向右走,end从右向左走。(需要注意的是:若选择最左边的数据作为key,则需要end先走;若选择最右边的数据作为key,则需要bengin先走)。
3、在走的过程中,如果end遇到小于key的数,则停下,begin开始走,直到begin遇到一个大于key的数时,将begin和right的内容交换,end再次开始走,如此进行下去,直到begin和end最终相遇,此时将相遇点的内容与key交换即可。(选取最左边的值作为key)
4.此时key的左边都是小于key的数,key的右边都是大于key的数
5.将key左边部分和右边部分再次进行这种单趟排序,如此反复操作下去,begin大于end时,便停止操作
void kp1(int[] arr, int begin, int end) {
if (begin > end) {
return;
}
int temp = arr[begin];
int i = begin;
int j = end;
while (i != j) {
while (arr[j] >= temp && j > i) {
j--;
}
while (arr[i] <= temp && i < j) {
i++;
}
if (i < j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[begin] = arr[i];
arr[i] = temp;
kp1(arr, begin, i - 1);
kp1(arr, i + 1, end);
}