快排为什么不稳定 举例说明

不稳定 来源于我们的一步步的操作
快排操作思路 从后面寻找小的 去兑换前面寻找的大的 然后直接交换 , ,
下面是实际

比如这样一个数组: 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;
}

}
代码注释较少 见谅 `

你可能感兴趣的:(算法,算法,排序算法,快速排序)