javascript之冒泡排序算法


    原理分析:

    其原理是從頭開始臨近的數字兩兩進行比較,比較一輪戰罷,最小的或者最大的被交換到第一位或者最後一位,

    其餘的再從頭進行兩兩比較,直到比較大到倒數第一位,此輪戰罷,最小的或者最大的排到了倒數第二位;。。依次類推遞歸

    以我們數組[1,4,7,2,6,8,3,5,9]舉例:

    第一輪排序:

        兩兩比較之後將最小值放置最後一位

        第一次:交換1|4

           比較前:1|4|7|2|6|8|3|5|9

           比較後:4|1|7|2|6|8|3|5|9

        第二次:交換1|7

           比較前:4|1|7|2|6|8|3|5|9

           比較後:4|7|1|2|6|8|3|5|9

        第三次:交換1|2

           比較前:4|7|1|2|6|8|3|5|9

           比較後:4|7|2|1|6|8|3|5|9

        第四次:交換1|6

           比較前:4|7|2|1|6|8|3|5|9

           比較後:4|7|2|6|1|8|3|5|9

        第五次:交換1|8

            比較前:4|7|2|6|1|8|3|5|9

            比較後:4|7|2|6|8|1|3|5|9

        第六次:交換1|3

            比較前:4|7|2|6|8|1|3|5|9

            比較後:4|7|2|6|8|3|1|5|9

        第七次:交換1|5

            比較前:4|7|2|6|8|3|1|5|9

            比較後:4|7|2|6|8|3|5|1|9

        第八次:交換1|9

            比較前:4|7|2|6|8|3|5|1|9

            比較後:4|7|2|6|8|3|5|9|1

    第二輪比較:

    將其餘最小值放置倒數第二位:

    第一次:交換4|7

      比較前:4|7|2|6|8|3|5|9|1

      比較後:7|4|2|6|8|3|5|9|1

    第二次:4>2不進行交換

    第三次:交換2|6

       比較前:7|4|2|6|8|3|5|9|1

       比較後:7|4|6|2|8|3|5|9|1

    第四次:交換2|8

       比較前:7|4|6|2|8|3|5|9|1

       比較後:7|4|6|8|2|3|5|9|1

    第五次:交換2|3

       比較前:7|4|6|8|2|3|5|9|1

       比較後:7|4|6|8|3|2|5|9|1

    第六次:交換2|5

       比較前:7|4|6|8|3|2|5|9|1

       比較後:7|4|6|8|3|5|2|9|1

    第七次:交換2|9

       比較前:7|4|6|8|3|5|2|9|1

       比較後:7|4|6|8|3|5|9|2|1

    第三輪比較:

    比較其餘最小值放置倒數第三位:

    第一次:7>4 不交換

    第二次:交換4|6

       比較前:7|4|6|8|3|5|9|2|1

       比較後:7|6|4|8|3|5|9|2|1

    第三次:交換4|8

       比較前:7|6|4|8|3|5|9|2|1

       比較後:7|6|8|4|3|5|9|2|1

    第四次:4>3 不交換

    第五次:交換3|5

       比較前:7|6|8|4|3|5|9|2|1

       比較後:7|6|8|4|5|3|9|2|1

    第六次:交換3|9

       比較前:7|6|8|4|5|3|9|2|1

       比較後:7|6|8|4|5|9|3|2|1

    第四輪比較:

        比較其餘最小值放置倒數第四位:

        第一次:7>6 不交換

        第二次:交換6|8

            比較前:7|6|8|4|5|9|3|2|1

            比較後:7|8|6|4|5|9|3|2|1

        第三次:6>4 不交換

        第四次:交換4|5

            比較前:7|8|6|4|5|9|3|2|1

            比較後:7|8|6|5|4|9|3|2|1

        第五次:交換4|9

            比較前:7|8|6|5|4|9|3|2|1

            比較後:7|8|6|5|9|4|3|2|1

    第五輪比較:

        比較其餘最小值放置倒數第五位:

        第一次:交換7|8

            比較前:7|8|6|5|9|4|3|2|1

            比較後:8|7|6|5|9|4|3|2|1

        第二次:7>6 不交換

        第三次:6>5 不交換

        第四次:交換5|9

            比較前:8|7|6|5|9|4|3|2|1

            比較後:8|7|6|9|5|4|3|2|1

    第六輪比較:

        比較其餘最小值放置倒數第六位:

        第一次:8>7 不交換

        第二次:7>6 不交換

        第三次:交換6|9

            比較前:8|7|6|9|5|4|3|2|1

            比較後:8|7|9|6|5|4|3|2|1

    第七輪比較:

        比較其餘最小值放置倒數第七位:

        第一次:8>7 不交換

        第二次:交換7|9

            比較前:8|7|9|6|5|4|3|2|1

            比較後:8|9|7|6|5|4|3|2|1

    第八輪比較:

        比較其餘最小值放置倒數第八位:

        交換8|9

            比較前:8|9|7|6|5|4|3|2|1

            比較後:9|8|7|6|5|4|3|2|1

排序完畢,輸出結果爲[9,8,7,6,5,4,3,2,1];

js代碼實現:

據此算法,我們不難寫出對應的js排序算法:

如下:

    var bubbleSort=function(arr){

    var sortOver=false;

    for(var i=0;i<arr.length;i++){

    for(var j=0;j<arr.length-i;j++){

    if(arr[j]<arr[j+1]){

       var temp=arr[j];

       arr[j]=arr[j+1];

       arr[j+1]=temp;

       sortOver=true;

    }

    }
       if(!sortOver){break;}
    }
    return arr;

    }

總結:

冒泡排序在各種排序算法中算是比較容易理解的一種排序方式,它通過一趟又一趟比較數組中每個元素使得較大數據下沉,較小數據上升,

正因爲如此,冒泡排序是排序算法中排序比較慢的,屬於O(n^2)算法在實際運用中效率比較低,如果數據量大,還有可能造成內存溢出,在各種排序算法發展中處於初級階段

實際中應用不是特多,拋除效率問題,還是比較適合小數據量排序;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章