首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >冒泡排序算法(Java)

冒泡排序算法(Java)

作者头像
全栈程序员站长
发布2022-07-06 19:12:50
发布2022-07-06 19:12:50
47900
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是全栈君

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

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

代码语言:javascript
代码运行次数:0
运行
复制
//冒泡排序
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.cn/116797.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档