1. 程式人生 > >js陣列的排序

js陣列的排序

1.javascript的sort()方法:

<script>
    var array = [ 1, 4, 9, -7, 0, 11, -10, 49, -60, 78];
    function compare(val1, val2) {
      return val1 - val2;
    }

    console.log(array.sort(compare));// compare函式是一種比較函式,在這裡作為sort()方法的引數;

    //sort()方法按照升序排列陣列項,會呼叫每個陣列項的toString()方法,然後比較得到字串;
    //toString()方法是吧布林值或者BooleanObject轉換為字串,然後返回結果;
    //
    </script>

2、氣泡排序:(從後向前):

  1. 比較相鄰元素:如果第一個比第二個大,就交換他們的位置;
  2. 對每一對相鄰元素做1步驟的工作,從第一對相鄰元素到最後一對相鄰元素,最後一個元素應該是最(大或者小)的;
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
<script>
      var array = [ 1, 4, 9, -7, 0, 11, -10, 49, -60, 78];
      function ssort(arr) {
        if(arr.length <=1) {
          return;
        }
        for(var j = 0; j < arr.length; j++) {
          //兩兩比較,如果前一個比後一個大,則交換位置。
          for(var i = 0; i < arr.length-1-j; i++) {
            if(arr[i] > arr[i+1]) {
              var temp = arr[i];
              arr[i] = arr[i+1];
              arr[i+1] = temp;
            }
          }
        }
        return arr;
      }
      console.log(ssort(array));
    </script>

3、快速排序方法:(遞迴,兩邊快速排序,這個方法我是在兄弟連的php課程上看到的)

<script>
      var array = [ 1, 4, 9, -7, 0, 11, -10, 49, -60, 78];
      function quickSort(arr) {
        if(arr.length <= 1) {
          return arr;
        }
        //取得中間值的索引
        var index = Math.floor(arr.length/2);
        //取到中間值
        var temp = arr.splice(index,1);
        //定義左右兩部分陣列
        var left = [];
        var right = [];
        for(var i = 0; i < arr.length; i++) {
          //如果元素比中間值小,那麼放在左邊,否則放在右邊
          if(arr[i] < temp) {
            left.push(arr[i]);
          }else {
            right.push(arr[i]);
          }
        }

        return quickSort(left).concat(temp, quickSort(right));
      }

      console.log(quickSort(array));
    </script>

Math.floor(x)方法是向下取整,返回小於或等於x的最接近的整數。

splice(index,num,item)方法是向陣列中新增專案,或是從陣列中刪除專案,並返回被刪除的專案。

  • index是整數,被操作專案所在的位置(必須)
  • num是整數,要刪除的專案的數量,如果為0,表示不刪除(必須)
  • item是向陣列中新增的新專案,可以是多個(可選)

push()方法是向陣列末尾新增一個或多個新專案並返回新陣列的長度

concat()方法連線兩個或多個數組,不會改變原有陣列,返回一個新陣列

4、插入序法:

  1. 從第一個元素開始,可以降第一個元素定為已經排序的;
  2. 取出下一個元素,在已經排序的元素序列中掃描;
  3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
  4. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置,將新元素插入到下一位置中;
  5. 重複步驟2
function insertSort(arr) {
        if(arr.length <= 1) {
          return arr;
        }
        //假設第0個元素是有序序列,第1個元素之後是無序的序列,從第1個元素開始依次將無序序列的元素插入到有序序列中
        for(var i = 1; i < arr.length; i++) {
          if(arr[i] < arr[i-1]) {
            //取出無序序列中最需要插入的第i個元素
            var temp = arr[i];
            //定義有序中的最後一個位置
            var j = i - 1;
            arr[i] = arr[j];
            //比較大小,找到插入的位置
            while(j >= 0 && temp < arr[j]) {
              arr[j+1] = arr[j];
              j--;
            };
            //插入
            arr[j+1] = temp;
          }
        }
        return arr;
      }

 

5、選擇排序法:

function selectSort(arr) {
        if(arr.length <= 1) {
          return arr;
        }
        for(var i = 0; i < arr.length; i++) {
          //設定當前範圍最小值和索引
          var min = arr[i];
          var minIndex = i;
          //在該範圍選出最小值
          for(var j = i+1; j < arr.length; j++) {
            if(min > arr[j]) {
              min = arr[j];
              minIndex = j;
            }
          }
          //將最小值插入,並將原來位置的最小值刪除
          arr.splice(i, 0, min);
          arr.splice(minIndex+1, 1);
        }
        return arr;
      }
  1. 在未排序序列中找到最小(大)元素
  2. 並存放到排序序列的起始位置;
  3. 然後,再從剩餘未排序元素中繼續尋找最小(大)元素;
  4. 然後放到已排序序列的末尾。
  5. 以此類推;