什么是冒泡排序?什么是選擇排序?它們之間有什么區別?


1.冒泡排序

原理:

  相鄰的兩個單位,比較存儲的數據。如果第一個單元的數據較大,就將兩個相鄰單元交換存儲數據。

過程:
  從起始單元開始比較,第一次循環,會選擇出一個最大值,放在數組所有單元的最后;
  之后,每次循環,都會比較出一個本次循環的最大值,放在當前參與比較單元的最后;
  之前已經比較選出的單元,不會參與下一次比較。

優化:
  (1) 最后一個單元已經通過倒數第二個單元參與比較了,因此最后一個單元就不用參與單次循環了。
  (2)之前比較出的最大值,不再參與下一次的比較

  (3)n個單元只要循環比較n-1次就可以, 最后就一個單元時不用再循環比較。

核心:

  交換存儲的數據,兩個相鄰的單元比較數據大小,第一個單元數值較大就交換兩個單元存儲的數據。

 

var arr = [30, 33, 13, 2, 1];
            for (j = 0; j <= (arr.length - 1) - 1; j++) {
                for (var i = 0; i <= (arr.length - 1) - 1 - j; i++) {
                    if (arr[i] > arr[i + 1]) {
                        var middle = 0;
                        middle = arr[i];
                        arr[i] = arr[i + 1];
                        arr[i + 1] = middle;
                    }
                }
            }
            console.log(arr);

 

2. 選擇排序

步驟:
  (1)先定義循環的起始位置默認為最小值所在位置,從起始位置下一個位置開始執行循環。

  (2)如果有位置上的數值小於存儲索引位置上的數值,就存儲這個位置的索引值。

  (3)循環結束后比較存儲的索引是否是起始位置索引,如果不是就交換兩個位置上的數值,會將本次循環的最小值,放置在循環的起始位置上。

  (4)再執行多次循環完成排序。

核心 :

  找到最小值的索引,再與起始位置交換數值。

優化 :

  (1)之前比較的數值不參與一次標記
  (2)2 n個單元,只要比較n-1次

 

        var arr = [5, 4, 3, 2, 1];
            //外層循環,最后剩下的那個數已經是最大的了因此就不用參與循環了,循環的次數要-1
            for (j = 0; j <= (arr.length - 1) - 1; j++) {
                //我們默認起始位置是最小值
                var min = j;
                //默認起始位置是最小值,比較的時候只需要從下一個開始比較就可以了
                for (i = j + 1; i <= arr.length - 1; i++) {
                    //讓min存儲最小值的數組下標
                    if (arr[min] > arr[i]) {
                        min = i;
                    }
                }
                //如果這個數組下標不是起始的數組下標
                //就交換min中存儲的索引下標對應的數值 和 j索引下標應的數值
                if (min != j) {
                    var middle = 0;
                    middle = arr[j];
                    arr[j] = arr[min];
                    arr[min] = middle;

                }
            }
            console.log(arr);

 

 

總結:

選擇排序: (效率高)
  如果發生大小順序問題,只是做賦值索引的操作。等循環完成,執行判斷,做一次數據交換。

冒泡排序:
  每次發生大小順序問題,都要執行數據交換操作。執行數據交換的次數高於選擇排序,執行數據交換的操作比較繁瑣,執行次數過多,執行效率低。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM