JavaScript实现冒泡排序

来源:互联网 发布:什么养车软件好 编辑:程序博客网 时间:2024/06/05 20:55

一、冒泡排序简介:
假设有一个数组a,我们想象成有一个班级名叫a班,现在全班随意排成一排,排头的位置是a[0],排尾的位置是a[a.length-1]。但高矮顺序不是有序的,我们想从矮到高排,排头最矮,排尾最高。

下面是一种方法:
第一轮:
1、首先,排头和旁边的队员比较,如果比旁边队员高,两个人交换位置;不比旁边队员高,则不变。经过这第一次比较,可以肯定站在a[1]位置的肯定是a[0]、a[1]位置队员中较高的那一位;

2、a[1]位置队员和a[2]位置队员比较,如果比a[2]位置队员高,两个人交换位置;不比a[2]位置队员高,则不变。经过这第二次比较,可以肯定站在a[2]位置的肯定是a[0]、a[1]、a[2]位置队员中最高的那一位;

3、a[2]位置队员和a[3]位置队员比较,如果比a[3]位置队员高,两个人交换位置;不比a[3]位置队员高,则不变。经过这第三次比较,可以肯定站在a[3]位置的肯定是a[0]、a[1]、a[2]、a[3]位置队员中最高的那一位;

······

直到a[a.length-2]位置队员和a[a.length-1]位置队员比较完成,这样的结果是,最高的那一位队员到了队尾的位置。

说明:
1、这有点像是“冒泡”的过程,称为冒泡排序还是比较形象的;就像老师说:“谁最高?排到队尾!”,但是眼睛看不准确,所以挨着挨着比较,第一轮之后最高的那个队员冒了出来,到了队尾的位置。

2、上面叙述中用了“不比某队员高”的叙述方法,而不是“比某队员矮”的叙述方法,采用后一种叙述将漏掉两者一样高的情况。当两者一样高时,不用换位置。

第二轮:
重复第一轮的过程,只不过,现在不用比较到最后一个位置,因为第一轮已经知道他是最高的,只需要比较到倒数第二个位置即可。

第三轮:
重复第一轮的过程,只不过,现在不用比较到倒数第二个位置,因为第二轮已经知道他是第二高的,只需要比较到倒数第三个位置即可。
·····
直到,只剩下排头的位置a[0]和旁边的位置a[1],这时a[2]位置已经是倒数第三高了,a[0]和a[1]再次比较,较高的排在a[1]位置,那么整个排序就已完成。
这种排序的思想就是冒泡排序。
二、用JavaScript实现冒泡排序

 function sort(arr) {            var l=arr.length-1;            var temp;            while(l>0){                for (var j = 0; j < l; j++) {                    if (arr[j]>arr[j+1]) {                        temp=arr[j+1];                        arr[j+1]=arr[j];                        arr[j]=temp;                    }                   }                l--;            }            return arr;        }        var a=[11,2,3,445,7,32,71,8,94];        console.log(sort(a));        var b=[94,11];        console.log(sort(b));

1、结束条件:
当l=1时,还有a[0]位置和a[1]位置没比较,还可以比较一次;当l=0时,全部都比较过了,因此不用再比较;
2、一个小陷阱:
如果用change函数代替交换过程,即调用用以下函数

function change(num1,num2){    var temp=num2;    num2=num1;    num1=temp;}

代替如下部分:


if (arr[j]>arr[j+1]) {
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
不能实现正确的逻辑,因为调用change函数时,将arr[j]和arr[j+1]的值赋值给num1和num2变量,然后交换num1和num2变量,并未实现交换arr[j]和arr[j+1]。

原创粉丝点击