java冒泡排序从大到小数组(java单例模式代码)

冒泡排序(一): 假设有5个数字35,56,34,22,16在一个int数组中,要求按从小到大排序输出如何采用冒泡排序算法呢? 1、基本思想 首先从数组的最左边开始,取出第0号位置(左边)的数据和第1号位置(右边)的数据,如果左边的数据大于右边的数据,则进行交换,否而不进行交换。接下来右移一个位置,取出第1个位置的数据和第2个位置的数据,进行比较,如果左边的数据大于右边的数据,则进行交换,否则不进…

冒泡排序(一):

假设有 5 个数字 35,56,34,22,16 在一个 int 数组中,要求按从小到大排序输出如何采用冒泡排序算法呢?

1、基本思想

首先从数组的最左边开始,取出第 0 号位置(左边)的数据和第1号位置(右边)的数据,如果左边的数据大于右边的数据,则进行交换,否而不进行交换。接下来右移一个位置,取出第 1 个位置的数据和第 2 个位置的数据,进行比较,如果左边的数据大于右边的数据,则进行交换,否则不进行交换。沿着这个算法一直排序下去,最大的数就会冒出水面,这就是冒泡排序.

2、排序过程。下面我们来模拟一下冒泡排序假设有数组{35,56,34,22,16}

第一轮排序:

第一次排序:35和56比较,56更大这里我们什么都别管 顺序为:35,56,34,22,16

第二次排序:56和34比较,56更大我们让56和34交换 顺序:35,34,56,22,16

第三次排序: 56和22比较,56更大,交换位置 顺序:35,34,22,56,16

第四次排序: 56比16比较,56更大,交换位置 顺序: 35,34,22,16,56

第一轮比较了四次

第二轮排序:

第一次排序:35和34比较,35更大,交换位置 顺序:34,35,22,16,56

第二次排序:35和22比较,35更大,交换位置 顺序:34,22,35,16,56

第三次排序:35和16比较,35更大,交换位置 顺序:34,22,16,35,56

第二轮比较了三次

第三轮排序:

第一次排序:34和22比较,34更大,交换位置 顺序:22,34,16,35,56

第二次排序:34和16比较,34更大,交换位置 顺序:22,16,34,35,56

第三轮比较了两次

第四轮排序:

第一次排序:22和16比较,22更大,交换位置 顺序:16,22,34,35,56

第四轮比较了一次

最终顺序:16,22,34,35,56


从上面我们看到了比较了 N-1 次,那么第二遍就为 N-2 次比较了,如此类推,比较次数的公式如下:

(N-1) + (N-2)+…+1=((N-1)*N)/2

所以以上总共比较次数为((5-1)*5)/2=10

代码实现如下:

/**
 * ClassName:BubbleSort <br/>
 *
 * Function: TODO ADD FUNCTION. <br/>
 * Reason: TODO ADD REASON. <br/>
 * Date: 2021年11月4日 上午11:23:32 <br/>
 * 
 * @author Administrator
 * @version
 * @since JDK 1.8
 * @see
 */
public class BubbleSort {
	public static void main(String[] args) {
		int[] data = { 35, 56, 34, 22, 16 };
		for (int i = 0; i < data.length; i++) {
			int min = i;
			// 选择出最小值的下标
			for (int j = i + 1; j < data.length; j++) {
				if (data[j] < data[min]) {
					min = j;
				}
			}
			// 将最小值放到未排序记录的第一个位置
			if (min != i) {// min>i
				int temp = data[i];
				data[i] = data[min];
				data[min] = temp;
			}
		}
		// 循环输出数组中的元素
		for (int i = 0; i < data.length; i++) {
			System.out.println(data[i]);
		}
	}
}
Java经典算法-冒泡排序

冒泡排序(二):

1、基本思想

两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。

2、排序过程

设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”漂浮”,如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

【示例】:
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97

代码实现:

/**
 * ClassName:BubbleSort <br/>
 *
 * Function: 冒泡排序:执行完一次内for循环后,最小的一个数放到了数组的最前面(跟那一个排序算法* 不一样)。相邻位置之间交换
 * Reason: TODO ADD REASON. <br/>
 * Date: 2021年11月4日 上午11:23:32 <br/>
 * 
 * @author Administrator
 * @version
 * @since JDK 8
 * @see
 */
public class BubbleSort {
	/**
	 * 排序算法的实现,对数组中指定的元素进行排序
	 * 
	 * @param array 待排序的数组
	 * @param from  从哪里开始排序 11 * @param end 排到哪里 11 * @param c 比较器 11
	 */

	public void bubble(Integer[] array, int from, int end) {
		// 需array.length - 1轮比较
		for (int k = 1; k < end - from + 1; k++) {
			// 每轮循环中从最后一个元素开始向前起泡,直到i=k止,即i等于轮次止
			for (int i = end - from; i >= k; i--) {
				// 按照一种规则(后面元素不能小于前面元素)排序
				if ((array[i].compareTo(array[i - 1])) < 0) {
					// 如果后面元素小于了(当然是大于还是小于要看比较器实现了)前面的元素,则前后交换
					swap(array, i, i - 1);
				}
			}
		}
	}

	/**
	 * 交换数组中的两个元素的位置
	 * 
	 * @param array 待交换的数组
	 * @param i     第一个元素
	 * @param j     第二个元素
	 */
	public void swap(Integer[] array, int i, int j) {
		if (i != j) {// 只有不是同一位置时才需交换
			Integer tmp = array[i];
			array[i] = array[j];
			array[j] = tmp;
		}
	}

	public static void main(String[] args) {
		Integer[] intgArr = { 35, 56, 34, 22, 16 };
		BubbleSort bubblesort = new BubbleSort();
		bubblesort.bubble(intgArr, 0, intgArr.length - 1);
		for (Integer intObj : intgArr) {
			System.out.print(intObj + \" \");
		}
	}
}
Java经典算法-冒泡排序

另外一种实现方式:

/**
 * ClassName:BubbleSort <br/>
 *
 * Function: 冒泡排序:执行完一次内for循环后,最大的一个数放到了数组的最后面。相邻位置之间交换 Reason: TODO ADD REASON.
 * <br/>
 * Date: 2021年11月4日 上午11:23:32 <br/>
 * 
 * @author Administrator
 * @version
 * @since JDK 8
 * @see
 */
public class BubbleSort {
	public static void main(String[] args) {
		int[] a = { 35, 56, 34, 22, 16 };
		bubble(a);
		for (int num : a) {
			System.out.print(num + \" \");
		}
	}

	public static void bubble(int[] a) {
		for (int i = a.length - 1; i > 0; i--) {
			for (int j = 0; j < i; j++) {
				if (new Integer(a[j]).compareTo(new Integer(a[j + 1])) > 0) {
					swap(a, j, j + 1);
				}
			}
		}
	}

	public static void swap(int[] a, int x, int y) {
		int temp;
		temp = a[x];
		a[x] = a[y];
		a[y] = temp;
	}
}

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

(0)
上一篇 2022年5月13日 下午3:51
下一篇 2022年5月13日 下午3:52

相关推荐

  • 在电脑上怎么打符号,电脑标点符号快捷大全

    用电脑比较多的人大概都遇到过这种情况,有些时候当我们需要一些特殊符号的时候在键盘上怎么找也找不到,下面小编就教大家如何轻松打出你需要的特殊符号。 大家可以在百度搜索框中搜索特殊符号,会得到以下结果。 我们可以选择一条点进去,就可以找到自己想要特殊符号了,当然有些输入法也是可以打出这些符号的,但是操作还是比较麻烦。怕麻烦的还是直接复制粘贴吧!

    2022年10月12日
    480
  • 苹果短信怎么备份,方法很简单四个步骤就完成备份

    苹果手机短信怎么备份?手机短信是我们经常会用到的,有时候短信中会记录着一些重要的数据,如果重要的短信不小心被误删了怎么办呢?这时候我们就需要找回iPhone已删除的短信;但是小编想提醒大家的是,对于一些比较重要的短信等数据,我们最好经常备份,那么怎么备份苹果手机短信内容呢?下面我们就一起来分享一个简单的iPhone短信导出教程,有需要的小伙伴都来学习学习吧。 想要备份苹果手机短信数据,我们今天借助…

    2022年7月20日
    520
  • qq空间破解器在线使用(qq空间万能破解器)

    Hi,大家好。这里是DM破解室,我是DM。 在公布QQ空间密码bug前先回馈一下~ 继上次的微信代码,有很多人问有没有其他表情雨代码,最近DM又收集到新的微信代码。今天给大家分享一波! 代码在文章末尾!!!显示不出来的可以留言的DM,DM会发给你哦~ 先给大家看看效果图: (1)这是上次的么么哒代码。 (2)蛋糕表情雨,很适合生日的时候哟 (3)流星雨 教程这里就不再次发送了哦,大家可以关注DM破…

    2022年5月9日
    7050
  • 屏幕录屏软件哪个好(不收费的录屏软件推荐)

    测试了30多款录屏软件,精选了5款免费,高清,无水印无广告的录屏工具分享给大家! 第一款:要推荐的就是windows10自带录屏功能 很多小伙伴想录制屏幕内容的时候,又搜索录屏软件,又下载录屏软件,最后还不一定好用。浪费了很多时间,又安装了很多不必要的软件。 其实简单的录屏需求,windows10自带的功能就可以完全满足。 直接使用“Win+G”打开电脑中的Xbox录屏 Win+G同时按下 然后点…

    2022年5月11日
    1400
  • pdf格式的文件怎么打开,pdf格式文件快速打开方法

    怎么浏览PDF文件?PDF文件在日常的办公生活和学习生活中使用的频率越来越频繁,因为PDF具有非常多的优点,比如将普通的Word文件、Excel文件转换成PDF文件再打印,就不会出现格式变动和错乱的问题,加上PDF文件非常便于传输,因而现在使用这种文件格式的人越来越多。 那么在电脑里面要怎么打开PDF文件浏览呢?许多朋友其实不是很清楚各种浏览方法,没关系,今天就给大家讲讲可以通过哪些方式来打开和浏…

    2022年7月16日
    520
  • 淘宝直通车推广计划及技巧,淘宝直通车推广有哪些优点

    摘要:手淘首页是什么?定向推广如何使用发挥最大威力?流量过少?费高太高?四个问题!一次解决! 不管新老卖家都在做直通车,但是真正做的好的又非常少,甚至连一些专业概念都不懂,那怎么能做好呢?我们都知道直通车是帮助宝贝曝光然后收费,但是有点击有转化就是另一码事了,今天要给大家分享的就是手淘首页结合直通车定向推广,引爆流量! 一、手淘首页是什么? 搞清楚最基本的概念,我们才能够对症下药。手淘首页就是指:…

    2022年5月18日
    920
  • wps文件加密怎么设置,wps加密文件的详细教程

    在传递wps表格时可以为其设置打开或修改密码,以保证数据传递的安全性。那么wps表格怎么设置设置打开或修改密码?下面就为大家介绍一下,一起来看看吧! 工具/原料WPSOffice个人版方法/步骤1、打开WPS表格编辑表格后,单击快速访问工具栏中的"保存"按钮; 2、或者从单击WPS表格按钮"文件->另存为"按钮; 3、打开"另存为"对话框,点击"加密"按钮; 4、弹出加密对话框,然后根据提示…

    2022年8月2日
    1070
  • 支付宝扫福什么时候开始,支付宝快速集五福攻略

    1月15日消息,支付宝官方微博称自己姓马的同事也写了一个福字,俏皮地问大家写的怎么样?支付宝还称扫这个福字会有惊喜。从图片我们看出,这个福字并不“单纯”,福字的左边是一些小树,寓意应该是蚂蚁森林,右边看起来也很像盒马鲜生的“盒马”二字,值得注意的是右下角还有一个小老鼠的造型,寓意着今年是鼠年。 其实在去年支付宝官方也公布了马云写的福字,是可以大概率的扫出一些万能福、敬业福等稀有福卡的,那今年马爸爸…

    2022年8月2日
    630
  • 自行车哪家好,自行车十大品牌排行榜

    自行车发烧友们对自行车的要求可是很高的 在骑行的过程中除了自身的力量等之外, 最重要的就是设备就是自行车一定得很好 世界十大名牌自行车介绍 排名不分先后顺序~~~ No.10Liteville Liteville(莱特维尔)是德国自行车品牌,在德国本土生产,全车纯手工打造,堪称自行车界的劳斯莱斯。Liteville以山地自行车为主,丘陵地带,山间小路,砂土碎石路面全面能够应对,而且在所有车上上都加…

    2022年9月21日
    490
  • 苹果系统内存怎么清理,只需三步快速释放内存

    16Gb的iPhone和iPad的真相是,他们真的没有16GB的可用空间,它更像是12GB。当看到自己的iPhone内存信息时候,忍不住要诅咒那个该死的“其他”。是的,“其他”,贪婪地占用你的手机上有限的内存空间,却没有给你的生活增加任何价值。以下,有几个简单的方法来回收这些珍贵的空间。第一步:删除你的浏览器缓存你很有可能从来不知道浏览器你的iOS设备上缓存了大量内容,特别是在积年累月的使用后,缓…

    2022年9月27日
    490

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信