为什么我的快速排序和别人的不一样?

博主通过对比发现自己与他人实现的快速排序算法过程不同,主要在于指针的使用方式。他人的算法在找到两个指针相等时交换,而博主则是每找到一个合适位置就交换。通过调整,博主的算法最终得到正确结果,但过程与传统方法不符,引发对快排正统性的思考。
摘要由CSDN通过智能技术生成

你有没有注意过自己的快排算法和别人不一样?

首先对于快排,基准数据使用第一个,中间,最后一个,或者随机一个,那么对排序过程有没有影响?
我以自己碰到一个题作为示例:

/*
*初始数据是25, 84, 21, 47, 15, 27, 68, 35, 20
*经过排序,每趟输出结果如下,让你用这种排序方法去提交
*/
15 20 21 25 47 27 68 35 84 
15 20 21 25 47 27 68 35 84 
15 20 21 25 47 27 68 35 84 
15 20 21 25 35 27 47 68 84 
15 20 21 25 27 35 47 68 84 
15 20 21 25 27 35 47 68 84 

第一眼看上去,这肯定是快排吧?但你动动手会发现第一趟结果可能就不一样??
那么怎么回事?

初步结论

我与朋友沟通了一下彼此的快排方法,发现真的过程不一样,他用的i,j指针同时找到时才交换,而我是每找到一个就交换,导致过程就不一样。
具体区别就是
在这里插入图片描述

别人的

附上我实现的代码,分别取第一个,最后一个和中间作为基准,看看结果

public static void kuaipai_mid(int[] a, int low, int high) {
   
		if (low < high) {
   
			int i = low, j = high;
			int mid = low + high >> 1;
			int tmp = a[mid];
			a[mid] = a[low];
			a[low] = tmp;
			while(i <j) {
   
				while (i<j && a[j] >= tmp) {
   	j--;	}
				while (i<j && a[i] <= tmp) {
   	i++;	}
				if(i < j) {
   
					int flag = a[i];
					a[i] = a[j];
					a[j] = flag;
				}
			}
			a[low] = a[i];
			a[i] = tmp;
			Print(a);
			System.out.println();
			kuaipai_mid(a, low, i-1);
			kuaipai_mid(a, i+1, high);
		}
	}
	public static void kuaipai_last(int[] a, int low, int high) {
   
		if (low < high) {
   
			int i = low, j = high;
			int tmp = a[high];
			while(i <j) {
   
				while (i<j && a[i] <= tmp) {
   	i++;	}
				while (i<j && a[j] >= tmp) {
   	j--;	}
//				while (i<j && a[i] <= tmp) {	i++;	}
				if
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值