冒泡排序

冒泡排序

冒泡排序是一种计算机科学领域的较简单基础的排序算法。其基本思路是,对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。

在这里插入图片描述

冒泡排序步骤

在这里插入图片描述

​ 15 – 26 – 58 – 45 – 24 – 6 – 1

​ 两两相互比较,小的放在前面,大的放在后面

在这里插入图片描述

第一轮:共比较6次

在这里插入图片描述

第二轮:共比较5次,最后组已经确定为最大,所以在第一轮的前提上少一轮,故此5次比较,

共减少1次比较

在这里插入图片描述

第三轮:共比较4次,最后两组已经确定由小到大,所以在第二轮的基础上再次减少一次比较。

共减少2次比较

在这里插入图片描述

**第四轮:**共比较3次,最后三组已经十分确定大小,所以在第三轮的基础上再次减少一次比较。

共减少3次比较

在这里插入图片描述

第五轮:共比较2次,最后四组已经确定大小,所以在第四轮的基础上再次减少一次比较。

共减少4次比较

在这里插入图片描述

第六轮:比较1次,后五组已经确定大小,所以在第五轮的基础上再次减少一次比较。

共减少5次比较

提示

1.自第二轮开始,最后一个数组已经确定为最大值,所以没有必要在去进行排序。故每次排序都比上一次排序减少一次。

代码实现

1.定义一个数组

 var arr=[15,26,58,45,24,6,1];

2.确定循环轮数 (i)

具数组分析,共7个数值,循环6次。

也就是说数组里的数值为n个,则需要循环n-1次。

for(var i=1 ;i<arr.length;i++)    //arr.lenth  =7 

所以说这个循环可以循环6次。

3.确定两两比较的次数。(j)

具上图分析,

第一轮,需要6次比较,全部比较

第二轮,需要5次比较,相比上一轮,少比较一次。

第三轮,需要4次比较,相比上一轮,少比较二次。

那么得出结论,

弟i轮的时候,需要比较(数组长度-i)次。

for(var j=1;j<=arr.length-i;j++)

OR

for(var j=0;j<arr.length-i;j++)

4.进行比较

if(arr[j-1]>arr[j]){
    [arr[j-1],arr[j]]=[arr[j],arr[j-1]];
}

如果前一个数值,大于第二个数值。那么它俩互换位置。

5.整合代码

当进行第一轮比较时,需要进行完六次数值之间的比较,才能进行下一轮。

也就是说,轮数比较应该将数值比较包涵在内。

  //定义一个数组
  var arr=[15,26,58,45,24,6,1];
  for(var i=1 ;i<arr.length;i++){	//排序轮数循环
  	for(var j=1;j<=arr.length-i;j++){	//数值两两比较的次数
  		//判断比较数值的大小
  		if(arr[j-1]>arr[j]){
  			[arr[j-1],arr[j]]=[arr[j],arr[j-1]];
  		}
  	}
  }

-------------------------------------------有话想说-------------------------------------

多尝试几组数组之间的排序,重新推导一遍更有助于理解冒泡排序。

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值