排序算法---交换排序( java)

本文对比分析了冒泡排序和快速排序两种常见的排序算法,介绍了它们的工作原理、时间复杂度、空间复杂度,并通过代码实现展示了快速排序的详细过程。文章旨在帮助读者理解排序算法的基本概念并指导实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交换排序中最常用的就是冒泡排序和快速排序,回顾了一些冒泡排序,估计写完这些博客对排序算法算是有了很深的了解了,最后要做一个小总结了,将这些算法的时间复杂度和空间复杂度做一个对比,以后再排序的时候能够对着有比较充分的认识。

1.冒泡排序

 public void bubbleSort(int[] a) {
	boolean ifBubble = false;
	for (int i = 0; i < a.length - 1; i++) {
	    for (int j = 0; j < a.length-1-i; j++) {
		if(a[j]>a[j+1]){
		    a[j] = a[j]+a[j+1];
		    a[j+1] = a[j]-a[j+1];
		    a[j] = a[j]- a[j+1];
		    ifBubble = true;
		}
	    }
	    if(!ifBubble){
		break;
	    }
	}

    }
对于n个数的排序,我们只需要对其进行n-1次的循环排序就好了,(常识了)说一些冒泡的原理吧,就是通过将数组的前一个元素和后一个元素进行对比,然后将大的放到后面,将小的放到前面,然后再将后面的一个数和其后面的一个数进行对比,如果一个数比较大的话,这一过程将会类似于一个泡从低端向上冒,最终到达顶部,So we call the methond as Bubble Sort;

2.快速排序

算是对冒泡排序的一种改进吧,感觉实现难度要比冒泡难的多,很不容易思考,大体的实现过程是:定义两个数,分别从数组的开始和末位置,从开始位置开始查找大于分界值的数,从最后的位置查找小于分界值的数,当在开始找到小于分界值的数的时候停止向上去寻找,当从末尾查找数值的时候,当找到大于分界值的数的时候停止查找,当i和j不相等的时候,i<j的时候,我们从右边走是找小于该基数的,停止住说明j所停止的位置的数是大于基数的,同理i停止的位置是小于基数的,将两个数进行交换,那么循环可以再次进行,直到两个数的大小相等,注意此处i和j是不可能相等的,当i>j的时候,说明两端的值已经满足了条件了,然后将j的值和基数对调,这样两端的值就保证了一边大于,一边小于。然后将剩余的数进行递归就好了。

顺便说点递归的优缺点,自己找了点资料,好处就是代码写起来不会那么的麻烦和复杂,坏处就是对空间的消耗会比较大,可能会导致堆栈溢出从而导致程序崩溃,为了避免这一情况最好的措施就是通过循环来进行代替。

下面是快速排序的代码实现

public void quickSort (int []a,int start ,int end){
       int i = start;
       int j = end+1;
       if(start < end){
	   while (true){
	       while (i< end && a[++i]>=a[start]);
	       while (j>start&& a[--j]<= a[start]);
	       if(i<j){
		   a[i] = a[i] + a[j];
		   a[j] = a[i] - a[j];
		   a[i] = a[i] - a[j];
	       }
	       else break;
	   }
	   a[start] = a[j]+a[start];
	   a[j] = a[start] - a[j];
	   a[start] = a[start] - a[j];
	   quickSort (a,start,j-1);
	   quickSort (a,j+1,end);
       }
       
   }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值