冒泡排序

冒泡排序

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

冒泡排序_第1张图片

冒泡排序步骤

在这里插入图片描述

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

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

冒泡排序_第2张图片

第一轮:共比较6次

冒泡排序_第3张图片

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

共减少1次比较

冒泡排序_第4张图片

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

共减少2次比较

冒泡排序_第5张图片

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

共减少3次比较

冒泡排序_第6张图片

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

共减少4次比较

冒泡排序_第7张图片

第六轮:比较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]];
  		}
  	}
  }

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

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

你可能感兴趣的:(数据结构与算法,java)