所谓冒泡排序,实际是借鉴了水中的鱼。在逆战班的池塘里,有一群可爱的小鱼,他们时不时地吐出泡泡,泡泡越往上走就会越大。那我们如何在一堆大小不一的泡泡中让他们从小到大的排列呢?
排序前:
我们观察来看,如何找到最大的那个圆呢?仅仅靠肉眼看么?如果成千上万将会很麻烦。这样我们就想到之前所说的“鱼吐泡泡”,越往上走越大,最大的在最上面。借鉴了“冒泡”的思路,我们可以这样看:我们将一堆圆分为两块区域:
一块为未排序部分,
另一块为已经排好序的部分。
首先,那我们进行两两比较,前者大于后者,二者互换位置;前者小于后者,位置保持不变,进行下一组比较。都比较完了之后,完成第一轮冒泡排序。
第一轮:i=0
注:第一轮结束后,最大的已经排在了最后。而且已经处在已排序部分,那么接下来只需排序左边未排序部分的四个即可。
第二轮:i=1;
剩下的几轮依次类推。一共需要(长度-1)轮,即本例需4轮。
那我们试着用循环来实现。
在第一轮时,i=0; 第1组时:j=0:
if(arr[j]>arr[j+1])
{
var temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
第2组时:j=1: 、、、javascrip
if(arr[j]>arr[j+1])
{
var temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
........
所以for循环实现如下:
、、、javascrip
for(var i=0;i<len;i++)
{
for(var j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
var temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
Js中的冒泡排序代码为:
、、、javascrip
function sorts(arr)
{
var len=arr.length-1;
for(var i=0;i<len;i++)
{
for(var j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
var temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
}
sorts(arr);
console.log(arr);
时间复杂度
一共需要4轮,第一轮比较4次,第二轮3次,第三轮2次,第四轮1次,一共4+3+2+1=10次; 我们类比n个,
即(n-1)轮,(n-1)+(n-2)+....+2+1
去掉低阶项,去掉常数项,所以时间复杂度为:O(n^2)
例子:1,7,9,3,4,8,2
结果: 1,2,3,4,7,8,9
这样我们完成了冒泡排序啦。