數(shù)組和算法-數(shù)組排序-冒泡排序

冒泡排序

  • 冒泡排序由于比較簡(jiǎn)單和容易理解,往往會(huì)成為人們首先想到的排序算法。所謂冒泡就是泡泡一個(gè)一個(gè)往上冒,讓體積最輕的泡泡浮在最上面,然后按照重量往下依次排列。(讓當(dāng)前項(xiàng)和后一項(xiàng)進(jìn)行比較,如果當(dāng)前項(xiàng)大于后一項(xiàng),兩個(gè)交換位置,小的在前面)

比如

var ary = [4,3,5,2,1];
第一輪比較
    4>3  交換位置 [3,4,5,2,1]
    4<5  不交換位置 [3,4,5,2,1]
    5>2  交換位置 [3,4,2,5,1]
    5>1 交換位置 [3,4,2,1,5]
    雖然沒有實(shí)現(xiàn)目標(biāo),但是已經(jīng)把最大的一項(xiàng)放在末尾
第二輪比較
    3<4  不交換位置 [3,4,2,1,5]
    4>2  交換位置 [3,2,4,1,5]
    4>1  交換位置 [3,2,1,4,5]
    到此結(jié)束本輪比較,因?yàn)樵诘谝惠喼幸呀?jīng)把最大的放在最后了,因此,下行就不需要了,但是為了驗(yàn)證,我再次寫出
    4<5 不交換位置 [3,2,1,4,5]
    雖然沒有實(shí)現(xiàn)目標(biāo),但是已經(jīng)把第二大的一項(xiàng)放在末尾
第三輪比較
    3>2  交換位置 [2,3,1,4,5]
    3>1  交換位置 [2,1,3,4,5]
    到此結(jié)束本輪比較,因?yàn)樵诘诙喼幸呀?jīng)把第二最大的放在倒數(shù)第二了,因此,下行就不需要了,但是為了驗(yàn)證,我再次寫出
    3<4  不交換位置 [2,1,3,4,5]
    4<5 不交換位置 [2,1,3,4,5]
    雖然沒有實(shí)現(xiàn)目標(biāo),但是已經(jīng)把第三大一項(xiàng)放在末尾
第四輪比較
    2>1  交換位置 [1,2,3,4,5]
    到此結(jié)束本輪比較,因?yàn)樵诘谌喼幸呀?jīng)把第三大的放在倒數(shù)第三了,因此,下一行就不需要了,但是為了驗(yàn)證,我再次寫出
    2<3  不交換位置 [1,2,3,4,5]
    3<4  不交換位置 [1,2,3,4,5]
    4<5 不交換位置 [1,2,3,4,5]   
    已經(jīng)實(shí)現(xiàn)目標(biāo)
從以上例子可以看出,我們可以總結(jié)出規(guī)律
假如有n項(xiàng),我們用i代表數(shù)組的索引,i從0開始。
我們最多最多比較n-1輪,把最大值放在最后,把第二大放在倒數(shù)第二。。。。。。每一輪比較的次數(shù):n-1-i;按照此規(guī)律即可實(shí)現(xiàn)數(shù)組排序  

規(guī)律已經(jīng)總結(jié)出,但是我們發(fā)現(xiàn)在比較中,要比較的兩項(xiàng)交換位置,那么怎樣才能交換位置呢?

var a= 1;
var b=2;
var c= null;
c=a;
a=b;
b=c;
console.log(a,b,c);

結(jié)果為2,1,1 我們可以看到a=2,b=1 a和b已經(jīng)交換位置了

第二種方法,不用第三方變量來交換位置

var a= 1;
var b=2;
a = a+b;
b = a-b;
a = a-b;
console.log(a,b)

結(jié)果為 2,1 a和b已經(jīng)交換位置

*寫到這里思想已經(jīng)分析完了,下面就是上代碼了

var ary = [4,3,5,2,1];
    var tmp = null;
    function bubbleSort(ary) {
        for(var i=0;i<ary.length-1;i++){//此處是控制比較輪數(shù),此數(shù)組長度為5,比較四次,也就是i<(5-1);i依次是0,1,2,3 比較4次
            for(var j=0;j<ary.length-1-i;j++){//此處控制每輪比較的次數(shù)
                if(ary[j]>ary[j+1]){
                    tmp = ary[j];
                    ary[j] = ary[j+1];
                    ary[j+1] = tmp;
                }
            }
        }
        return ary;
    }
    var res = bubbleSort(ary);
    console.log(res);

結(jié)果為 [1, 2, 3, 4, 5]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,301評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,826評(píng)論 0 15
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,372評(píng)論 0 35
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,352評(píng)論 0 2
  • 排序的基本概念 在計(jì)算機(jī)程序開發(fā)過程中,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個(gè)關(guān)鍵字進(jìn)行排序,排序完成的序列可用于快...
    Jack921閱讀 1,571評(píng)論 1 4

友情鏈接更多精彩內(nèi)容