不稳定 来源于我们的一步步的操作
快排操作思路 从后面寻找小的 去兑换前面寻找的大的 然后直接交换 , ,
下面是实际
比如这样一个数组: 6 100 100 1
第一步 :根据算法操作 1显然会跟100交换 直接就交换了
看到这里应该都能看懂了(前提是有快排算法基础)
下面是我写的代码 注释较少 不宜看懂` private static int[] func(int[] a, int l, int r) {
if(l>=r){return null;}//比如 数组: 6 1 自己慢慢一步步推,能知道有个l是大于r的了
int start = a[l];
int origin_l = l;
int origin_r = r;
while (l < r) {
//while(a[r--]>=start){}这不对 加入4 ,1,2,3 //321都不满足 但是r还是减了1
while (a[r] >= start && l < r) {
r--;
}
while (a[l] <= start && l < r) {
l++;
}
if (l < r) {
int temp = a[r];
a[r] = a[l];
a[l] = temp;
}
}
//走到这 说明lr重合了
a[origin_l] = a[l];
a[l] = start;
//完成左半部分
func(a, origin_l, l - 1);
//完成右半部分
func(a, l + 1, origin_r);
return a;
}
}
代码注释较少 见谅 `