1. 程式人生 > >JS排序演算法--氣泡排序和選擇排序

JS排序演算法--氣泡排序和選擇排序

  在我們JS語法當中,資料型別中的複雜資料型別,有一項我們常用的陣列資料型別,其中儲存的資料有時是亂序的,需要排序,我們有多種方法,最簡單的肯定是 :變數.sort(fonction(a,b){a>b})這種方法。然而我這裡講到的是另外兩種手寫演算法來排序的。

  氣泡排序,是通過for每次迴圈,來找到一個最大值,多次迴圈來確定陣列排序,咋們來看具體程式碼實現,在講解 

  這裡咋們看到是分為外層迴圈與內層迴圈的,外層迴圈是為了執行迴圈次數,內層迴圈是為了每一次執行的資料與其他資料的對比比較迴圈。通過索引下標來控制迴圈的最大值,也就是arr.length,內層迴圈中巢狀一層if判斷語句,看兩個資料之間的大小,如果前一個比後一個大,那麼就行資料互換操作,這裡需要注意的是,需要新增一個變數來進行中間互換,否則資料是互換不了的。

  另外則是這裡的程式碼是進行了一定優化的,加快程式的執行效率,減少執行次數,

  外層迴圈如果有n個單元參加排序,那麼只需要迴圈n-1次即可,而最後一個單元時是不需要進行比較迴圈排序的,其他的排序好,那麼這個就自動排序好的,所以迴圈最大值是(arr.length-1) -1;

  內層迴圈是上一次參與迴圈,已經決定出來的最大數值,不用參與下一次迴圈, 第一次排序,少0個單元參與,第二次排序,少1個單元參與,第三次排序,少2個單元參與........通過外層迴圈變數,定義是從 0 開始的迴圈數值,每次內層迴圈,次數,再減去 外層迴圈變數 的數值,也就是(arr.length-1) -1 - j;

  選擇排序,也就是從起始位置尋找最小值的索引下標。如果最終儲存的索引下標不是最初設定的起始位置,那就互動儲存資料

  

 

  這裡程式碼執行的原理順序是,外層迴圈:實現迴圈次數,是陣列單元個數-1;內層迴圈:每次迴圈,將本次迴圈找出來的最小值,與起始位置進行數值交換,先預設起始位置的數值為最小值,儲存起始位置的索引值,之後從起始位置的下一個位置開始迴圈,生成之後的所有索引下標,如果之後位置上的數值,小於儲存的索引位置的數值,就儲存這個數值的索引,迴圈結束,變數中儲存本次內層迴圈選擇出的最小值的索引下標,進行比較判斷,如果這個索引值,不是起始索引值,就交換兩個索引值對應的資料。     而程式優化的部分則是和氣泡排序相對相同,外層優化:之前比較出的數值,不參與下一次的比較,內層優化:從起始位置的下一個位置開始迴圈。      最後提到的是,這兩種方法其實在實際開發當中用處並不大,但是對於程式設計人員的思維邏輯鍛鍊還是有一定益處的,謝謝大家!                  

 

                                                                                        

 

&nbs