幾個基本的前端排序方法


學習一下幾個日常的算法排序問題

1. 冒泡排序

實現:用for循環遍歷數組元素,拿出前一個和后一個元素對比,如果前邊的值大於后邊的值就交換位置,遍歷元素進行排序。
圖片應該看起來更清晰:

 

 

var arr = [89,12,8,14,23,45,9,15,33];
function bubble_sort(arr){
    var len = arr.length;
    if(arr.length ==1) {
        return
    }
    for(var i = 0; i < len; i++) {
        for(var j = 0; j < len-1; j++) {
          //如果前一個值比后一個值大,那么交換位置
         if(arr[j] > arr[j+1]) {
            var temp = arr[j];
            arr[j]  = arr[j+1];
            arr[j+1] = temp; 
          }
        }
    }
    return arr;
}
//測試一下代碼
bubble_sort(arr);
//log [8, 9, 12, 14, 15, 23, 33, 45, 89]

2.快速排序

算法實現:
1.在數據集之中,選擇一個元素作為”基准”(pivot)。
2.所有小於”基准”的元素,都移到”基准”的左邊;所有大於”基准”的元素,都移到”基准”的右邊。這個操作稱為分區 (partition)操作,分區操作結束后,基准元素所處的位置就是最終排序后它的位置。
3.對”基准”左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。
圖示:

 

function quickSort(arr){
    //如果數組<=1,則直接返回
    if(arr.length<=1){return arr;}
    var pivotIndex=Math.floor(arr.length/2);
    //找基准,並把基准從原數組刪除
    var pivot=arr.splice(pivotIndex,1)[0];
    //定義左右數組
    var left=[];
    var right=[];

  //比基准小的放在left,比基准大的放在right
    for(var i=0;i<arr.length;i++){
        if(arr[i]<=pivot){
            left.push(arr[i]);
        } else{
            right.push(arr[i]);
            }
       }
  //遞歸
  return quickSort(left).concat([pivot],quickSort(right));
}

.選擇排序

算法實現思路:
選擇排序(Selection Sort)是一種簡單直觀的排序算法。它的工作原理如下,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

 

 

function selectionSort(array) {
  var length = array.length,
      i,
      j,
      minIndex,
      minValue,
      temp;
  for (i = 0; i < length - 1; i++) {
    minIndex = i;
    minValue = array[minIndex];
    for (j = i + 1; j < length; j++) {
      if (array[j] < minValue) {
        minIndex = j;
        minValue = array[minIndex];
      }
    }
    // 交換位置
    temp = array[i];
    array[i] = minValue;
    array[minIndex] = temp;
  }
  return array
}

 

 


免責聲明!

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



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