冒泡排序和改进

本文介绍了冒泡排序的基本思想,包括从前往后的‘沉底法’和从后往前的‘冒泡法’,并详细讲解了如何通过记录交换位置来优化冒泡排序算法,以提高效率。此外,提供了Java实现的‘沉底法’冒泡排序代码示例。

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

冒泡排序和改进

冒泡排序思想:

将相邻的两个数做比较,如果不满足排序要求,则交换位置。具体有两种,一种就是从前往后相邻的比较,假设按照增序排,第一个跟第二个比,如果第一个大,则交换。然后将第二个和第三个位置的比。以此类推,一直比下去,这样一个轮回,可以将最大的那个数字送到最后一个位置。然后比较余下的。因此也称这种为“沉底法”。还有一种类似,就是从后往前比较,就是所谓的冒泡法,每一个轮回,将最小的那个数字送到了第一个元素的位置。

冒泡算法的改进:

记录每次交换的位置,当一次冒泡中无两个元素交换,则后面的部分已经有序,以后每轮比较不需要再次比较已经有序的部分。



java实现代码:下面代码以沉底法为例的代码。


package com.mytest.hw;

public class BubbleSort {

	/**
	 * 冒泡排序和冒泡排序的改进
	 */
	public static void main(String[] args) {
		int[] a={5,4,3,2,7,8,9,10};
		for (int i : a) {
			System.out.print(i+" ");
		}
		System.out.println("\n排序后:");
		
		//sortbubble1(a);
		sortbubble2(a);
		for (int i : a) {
			System.out.print(i+" ");
		}
	}

	

	//时间复杂度 O(n^2)  沉底
	private static void sortbubble1(int[] a) {
		for(int i=1;i<a.length;i++)
			for(int j=0;j<a.length-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];
				}
			}
		
	}
	//冒泡的改进算法  
	private static void sortbubble2(int[] a) {
		int lastexchange=a.length-1;//记录最后一次交换的位置,第一次必须比较到最后
		int exchange=0;//记录每次交换的位置
		
		while(lastexchange>0){
			for(int j=0;j<lastexchange;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];
					exchange=j;
				}
			}
			lastexchange=exchange;
		}
		
	}
	

}

备注:

a[j]=a[j]^a[j+1];
a[j+1]=a[j]^a[j+1];
a[j]=a[j]^a[j+1];

如上代码为不引入第三个变量交换两个元素位置的方法;


          冒泡法之沉底法实现如上代码,冒泡法之冒泡法原理类似,不再啰嗦了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值