冒泡排序-javascript算法

冒泡排序-在javascript中的实现

这里把自己刚在javascript语言精粹上学的一点东西拿出来

加上了自己的理解,这本书的确很犀利,虽然不厚,但是每个点都讲的恰到好处,适合javascript有一定基础,对高级程序设计能看过一遍的人看。

不知道为啥好几本javascript好书都停产了,让我只能看电子书,不happy

 1 //javascript冒泡排序,直接添加到基础类型的原型上
 2     //这里用一个javascript语言精粹上的 代码,为基础类型原型添加方法,
 3     // 因为Array,String他们自身也是构造函数,他们创建对象也是通过new 构造函数行的,因此Array.prototype,String.prototype都指向了Function.prototype
 4     // Array.method的时候,先访问Array自身函数对象没有method方法,接着Array.prototype仍没有,接着Function.prototype找到了
 5     Function.prototype.method = function (name, func) {
 6         if(!this.prototype[name]){  
 7             //最好先判断一下是原型中否有这个方法,如果没有再添加
 8             this.prototype[name] = func;
 9         }
10         return this;
11     };
12     
13 
14     Array.method('bubble',function(){
15         // 冒泡算法 总共循环数组的长度次,即len次,每次将最小的放最后
16         
17         var len = this.length;
18         var i = 0, 
19             j = 0, 
20             tmp =0;
21 
22         
23         for (i=0 ; i < len; i++) {
24             for ( j = 0; (j +1) < len-i; j++) {
25                 console.log()
26                 if ( this[j] > this[j+1] ){
27                     tmp = this[j];
28                     this[j] = this[j+1];
29                     this[j+1] = tmp;
30                 }
31             };
32         };
33 
34         return this;
35     });
36 
37     alert([21,32,1,31,22,45,68,37,].bubble());

看了另一个前端工程师,西风瘦马的代码,在第一层for循环加入初始化一个exchange交换标志为false,当有交换发生时,则变为true,在第二层for循环结束后加入一个判断,如果为false,即从前往后对比没有交换,证明已经大小顺序正确,即可break来跳出外层for循环。

这里附上代码

// 西风瘦马的冒泡排序代码
// http://blog.tugai.net/2009/03/08/javascript-bubble-sort/

//需要排序的数组
var list = Array(23, 45, 18, 37, 92, 13, 24);
//数组长度
var n = list.length;
//交换顺序的临时变量
var tmp;//
//交换标志
var exchange;
//最多做n-1趟排序
for (var time = 0; time <n - 1; time ++) {
    exchange = false;
    for (var i = n - 1; i> time; i–-) {
        if (list[i] <list[i - 1]) {
            exchange = true;
            tmp = list[i - 1];
            list[i - 1] = list[i];
            list[i] = tmp;
        }
    }
    //若本趟排序未发生交换,提前终止算法
    if (!exchange) {
        break;
    }
}
alert(‘数组排序后为:’ + list + ‘,n共排了’ + time + ‘趟’);

  

posted @ 2012-08-18 19:37  zzu-han  阅读(2049)  评论(0编辑  收藏  举报