冒泡排序算法(Java)

冒泡排序算法(Java)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。



冒泡排序即每次遍历。相邻数字间进行比較,前者大于后者进行交换,不断将最大值后移,直至沉至最后位置;算法关键要点在于确定每次循环的边界。

后面两种算法则是对冒泡排序一定程度上的改良,但相对于其它排序算法,冒泡排序性能依旧较差。

//冒泡排序
public class Bubble_Sort {

	//最原始的解法
	public void bubble_sort1(int[] data)
	{
		int n = data.length;
		for(int i = 0; i < n; i++)
		{
			//注意循环的index范围,避免溢出
			for(int j = 0; j < n - i - 1; j++)
			{
				if(data[j] > data[j + 1])
				{
					swap(data, j , j + 1);
				}
			}
		}
	}
	
	//改进算法。通过引入一个标志量flag,推断一次循环是否有移动。若无移动,则表示
	//排序已经完毕,无需在进行下一次继续循环
	public void bubble_sort2(int[] data)
	{
		int n = data.length;
		boolean flag = true;//标示是否进行了移动
		int index = n - 1; //标示须要循环的最后一位的index
        //一旦在移动。则继续循环		
		while(flag)
		{
			flag = false;
			for(int j = 0; j < index - 1; j++)
			{
				if(data[j] > data[j + 1])
				{
					swap(data, j , j + 1);
					flag = true;
				}
			}
			index--;
		}
	}
	
	//改进算法二:当一次遍历中。最后m位都未进行转换,则表示后面n位都比当前这个最大数要大
	//依据冒泡排序知,每次沉入最大值,则后面这些位一定已经排好序
	public void bubble_sort3(int[] data)
	{
		int n = data.length;
		int index = n - 1;
		
		while(index != 0)
		{
			int k = 0;
			for(int j = 0; j < index - 1; j++)
			{
				if(data[j] > data[j + 1])
				{
					swap(data, j , j + 1);
					k = j;
				}
			}
			index = k;
		}
	}
	
	//无法像C++一样使用引用实现,故仅仅好使用data数组进行改变
	private void swap(int[] data , int a, int b)
	{
		int temp = data[a];
		data[a] = data[b];
		data[b] = temp;
	}
	
	public void print_array(int[] data)
	{
		for(int num : data)
		{
			System.out.print(num);
			System.out.print(" ");
		}
	}
	
	
	public static void main(String[] args) {
		
		Bubble_Sort bubble_Sort = new Bubble_Sort();
		int data[] = {2,34,45,2,13,24,5,24,57};
		bubble_Sort.bubble_sort3(data);
		bubble_Sort.print_array(data);

	}

}

版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116797.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月15日 下午2:00
下一篇 2022年1月15日 下午3:00


相关推荐

  • 告别命令行与高昂代装费!AutoClaw 本地零门槛部署 OpenClaw,自定义APIkey调度 GPT-5大模型

    告别命令行与高昂代装费!AutoClaw 本地零门槛部署 OpenClaw,自定义APIkey调度 GPT-5大模型

    2026年3月14日
    2
  • 金蝶迷你版云服务器没有响应,金蝶迷你版连接金蝶云服务器异常[通俗易懂]

    金蝶迷你版连接金蝶云服务器异常内容精选换一换云服务器列表页面显示了所有已创建的GPU加速型云服务器信息。您可以参考如下操作查看云服务器详情。云服务器详情中展示了如下信息:云服务器名称、ID、状态等。云服务器上会话的状态、当前应用、连接设备、连接用户等。VR云渲游平台中涉及的云服务器状态如表1所示。云服务器状态一览云服务器状态说明正常设备与该云服务器正在连接中。闲置处于该状态的云服务云服务器列表页…

    2022年4月17日
    80
  • 【C语言】递归详解汉诺塔问题

    【C语言】递归详解汉诺塔问题汉诺塔 是一个源于印度古老传说的益智玩具 大梵天创造世界的时候做了三根金刚石柱子 在一根柱子上从下往上按照大小顺序摞着 64 片黄金圆盘 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上 并且规定 在小圆盘上不能放大圆盘 在三根柱子之间一次只能移动一个圆盘 当把 64 片圆盘从第一根石柱移动到第三根石柱时 这个世界就会毁灭 而婆罗门移动圆盘需要用多长时间呢 通过平常的方法是很难计算的 今天我们就利用递归的思想来计算一下汉诺塔的移动次数和汉诺塔的移动步骤

    2026年3月16日
    2
  • 兴师动众解决由cookie引发的400报错问题

    兴师动众解决由cookie引发的400报错问题背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能。购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了cookie,用于在下单页展示所选航班信息。遇到的问题是购买单程机票的时候,一切流程正常(从航班查询页,选择需要的购买的航班,进入到下单页,进行下单操作);但是购买往返机票的时候,进入到下单页时,发现下单页所有接口都报了400的错误,继而再访问该网站的其他页面也都报了400的错误。一般来说400报错是因为前后端参数格式或者请求头不一致导致的问题,前.

    2022年6月10日
    36
  • FLASHFXP3.6注册码「建议收藏」

    FLASHFXP3.6注册码「建议收藏」
    FLASHFXPxgA9UrTnxgAAAAC7W5MNJwTnsl73n0Vuu1AePJgEAG
    41mgSvHSiDWi1Kg8B5xJNCCCAVCMr9Rtmo6u93NoQF27wg6KrQ
    3RIE8Jz6Qy/YlnYIBf58aRJrG7rGITgQJ4KSmyK0wz4xySS+0H
    N/9lJ65abJf7rB7m3R2vyjhakIKSzZnquXQ0/Rdv5nMS+Bbc7n
    rMqoYnTURE8jeePVOg

    2022年7月26日
    10
  • tracker服务器地址(每日更新)_hypixel服务器地址

    tracker服务器地址(每日更新)_hypixel服务器地址https://dns.icoa.cn/tracker/udp://tracker.tiny-vps.com:6969/announcehttps://1337.abcvg.info/announcehttps://tracker.fastdownload.xyz:443/announcehttps://opentracker.xyz:443/announceh…

    2026年4月20日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号