前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >冒泡排序算法

冒泡排序算法

作者头像
爱撒谎的男孩
发布2018-05-25 16:15:13
5270
发布2018-05-25 16:15:13
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

冒泡排序算法

原理

  • 比较相邻的两个数,将值较大的元素放在最前面,由于较小的数字像泡泡一样浮上来,因此取名为冒泡

从后向前比较(小的数上浮)

  • 第一趟:从数组的最后一个元素和倒数第二个元素比较,小的上浮(交换),之后倒数第二个和倒数第三个数字比较,小的上浮(交换),直至第二个数字和第一个数字比较,小的上浮,那么经过一趟排序之后,此时的第一个元素就是最小的
  • 第二趟: 经过第一趟之后,第一个就是最小的数字,因此第二趟就不比较第一个和第二个数字了。从最后一个元素和倒数第二个元素比较,小的上浮,直至第三个元素和第二个元素比较,小的上浮,那么此时的第二个就是仅次于第一个的小的元素
  • 第三趟:和前面一样的比较,不过就是不用比较第二个和第三个元素了,因为经过第一趟和第二趟之后,数组中的第一个和第二个元素已经是最小的两个了。经过第三趟比较,第三个元素是仅次于第一个和第二个元素小的元素
  • 第四趟第五趟………………………………
  • 从上面我们可以得出,假设数组中有n个元素,那么需要经过n-1趟排序才可以完成全部的比较,最后一趟可以比较出倒数第一个和倒数第二个元素的大小

实现

代码语言:javascript
复制
/**
 * 冒泡排序算法之从后向前比较排序
 * @param a  需要排序的数组
 */
public static void bubbleSort(int[] a) {
	// 外层循环控制排序的趟数,总共需要n-1趟排序
	for (int i = 0; i < a.length - 1; i++) {
		//内层循环控制的是每一趟排序需要比较的次数,j=a.length-1 表示从最后一个元素开始比较,j>i是用于控制每趟之后比较的次数
		//比如,经过第一趟之后,那么第一个元素肯定是最小的,因此就不需要将第二个元素和其比较了,第二趟之后第二个元素第一个和第二个元素就是最小的,都需要比较了
		for(int j=a.length-1;j>i;j--){
			//比较大小,较小的就上浮
			if(a[j]<a[j-1]){
				//交换位置
				int temp=a[j];
				a[j]=a[j-1];
				a[j-1]=temp;
			}
		}
	}

}

从前向后比较(大的数字下沉)

  • 第一趟:从第一个元素和第二个元素进行比较,较大的下沉(交换),然后第二个元素和第三个元素比较,较大的下沉,直至倒数第二个和最后一个比较,大的下沉,那么此时的最后一个数就是最大的
  • 第二趟: 从第一个元素和第二个元素进行比较,较大的下沉,然后第二个和第三个比较,直至倒数第三个和倒数第二个比较,大的下沉,那么此时的倒数第二个数是仅次于最后一个数小的元素。因为经过第一趟之后,最后一个元素已经是最大的,因此不需要比较了
  • 第三趟: 经过第二趟之后,倒数第二个仅次于最后一个元素小的元素了,因此在第三趟中只需要比较到倒数第四个和倒数第三个元素的大小即可,大的下沉,那么此时的倒数第三个元素又是前面所有元素中最大的,因此在第四趟排序就不需要和其比较了。
  • 第四趟……………………………………………………
  • 从上面我们可以得出结论: 假设有n个元素,那么总共需要进行n-1趟排序

实现

代码语言:javascript
复制
/**
	 * 冒泡排序算法之从前向后比较排序
	 * @param a  需要排序的数组
	 */
	public static void bubbleSort(int[] a) {
		// 外层循环控制排序的趟数,总共需要n-1趟排序
		for (int i = 0; i < a.length - 1; i++) {
			//内层循环控制每趟循环比较的次数,j=0表示从第一个元素开始进行比较,j<a.length-1-i用来控制每趟循环之后不用再比较的元素索引
			//比如第一趟循环之后,最后一个元素就是最大的,那么在第二趟循环就不需要和其比较了
			for (int j = 0; j < a.length - 1 - i; j++) {
				//相邻的元素进行比较,如果前面的大于后面的就交换位置
				if (a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}

	} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 冒泡排序算法
    • 原理
      • 从后向前比较(小的数上浮)
        • 实现
      • 从前向后比较(大的数字下沉)
        • 实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档