排序演算法的JS實現

來源:互聯網
上載者:User

標籤:比較   使用   cti   常用   img   dex   可視化   length   i++   

排序演算法是基礎演算法,雖然關鍵在於演算法的思想而不是語言,但還是決定藉助演算法視覺化檢視結合自己常用的語言實現一下

1.冒泡排序

基本思路:依次比較兩兩相鄰的兩個數,前面數比後面數小,不變。前面數比後面數大,交換順序。一輪下來,最後的一個數是最大的數。

                  外迴圈每增加一次,內迴圈減少一次。

圖形展示:

function bubbleSort(arr){  for (var i = 0; i < arr.length; i++) {    for (var j = 0; j< arr.length-i-1; j++) {      if(arr[j]>arr[j+1]){        var temp=arr[j];        arr[j]=arr[j+1];        arr[j+1]=temp;      }    }    }  return arr;}

 

2.選擇排序

基本思路:迴圈數組,找出最小的值,和第一個交換位置;然後在剩下的數中,找出第二小的數,放在第二個;依次類推。

圖形展示:

function selectSort(arr){  for( var i=0;i<arr.length-1;i++){    var min=i;    for(var j=i+1;j<arr.length;j++){      if(arr[j]<arr[min]){        min=j;      }      if(i!=min){        var temp=arr[i];        arr[i]=arr[min];        arr[min]=temp;      }    }  }  return arr;}

 

3.插入排序

   基本思路:把數組分為[已排序]和[未排序]兩部分,第一個數為[已排序],其餘為[未排序];

                     從[未排序]中抽出一個數,和[已排序]部分比較,插入到合適位置。

圖形展示:

function insert(arr){  for(var i=0;i<arr.length;i++){   var value=arr[i];   //i表示未排序部分的當前位置,value表示當前比較的元素   for(var j=i-1;j>=0&&value<arr[j];j--){  //j表示已排序部分的當前位置      arr[j+1]=arr[j];   }   arr[j+1]=value;  }return arr; }

4、合并排序

基本思路:不斷的將數組對半分,只到每個數組只有一個元素;

                 將分出來的部分重新合并,合并的時候按順序排列。

圖形展示:

方法一

 

 

function mergeSort(arr){  if(arr.length<2){    return arr;  }  var middle=Math.floor(arr.length/2),  left=arr.slice(0,middle),  right=arr.slice(middle);  return merge(mergeSort(left),mergeSort(right));}function merge(left,right){  var result=[];  while(left.length>0 && right.length>0){    if(left[0]<=right[0]){      result.push(left.shift());    }else{      result.push(right.shift());    }  }  // while(left.length){  //   result.push(left.shift());  // }  // while(right.length){  //   result.push(right.shift());  // }  if(left.length){    result=result.concat(left);  }  if(right.length){    result=result.concat(right)  }  return result;}

方法二

function mergeSort(arr){    //只有一個數的時候退出遞迴    if(arr.length<2){        return arr;    }    //遞迴    var middle=Math.floor(arr.length/2),        left=arr.slice(0,middle),        right=arr.slice(middle);        return merge(mergeSort(left),mergeSort(right))    }//將兩個數組合并;合并的時候按從小到大的順序 function merge(left,right){    var left_index=0,    right_index=0,    result=[];    while(left_index<left.length&&right_index<right.length){        if(left[left_index]<right[right_index]){            result.push(left[left_index++]);        }else{            result.push(right[right_index++]);        }    }    return result.concat(left.slice(left_index),right.slice(right_index));

5.快速排序

基本思路:以一個數為基準,比基準小的數放到左邊,比基準大的值放右邊;遞迴進行,不能再分後退出遞迴

圖形展示:

方法一:以中間值為基準,這種方法建立了兩個新數組,暫用空間

function quickSort(arr){    if(arr.length<2){        return arr;    }    var base=Math.floor(arr.length/2);    var pirot=arr.splice(base,1)[0];    //基準值    var left=[],    right=[];        for(var i=0;i<arr.length;i++){        if(arr[i]<pirot){            left.push(arr[i]);        }else{            right.push(arr[i]);        }    }    // 遞迴,把數組合并在一起把數組合并在一起    return quickSort(left).concat([pirot],quickSort(right));}

方法二,以第一個值為基準,先向從右往左,找比它小的值;再從左向右找比它大的值

var quickSort = function(arr, head, tail) {  if (head > tail) {      return;    }    var i=head;    var j=tail;    var Pivot=arr[i]; /**< 選取基準值 */    while (i<j) {        //使用j,從序列最右端開始掃描,直到遇到比基準值小的數        while ((i<j) && (Pivot <= arr[j])) {          j--;        }        //交換位置        if (i<j) {          arr[i++]=arr[j];        }        //使用i,從序列最左端開始掃描,直到遇到比基準值大的數        while ( (i<j) && (Pivot >=arr[i]) ) {          i++;        }        //交換位置        if (i<j) {          arr[j--]=arr[i];        }    }      //最後填入基準值放入合適的位置    arr[j]=Pivot;    //對基準值兩邊序列進行排序的遞迴調用    quickSort(arr, head, i-1);    quickSort(arr, i+1, tail);    return arr;}

 

排序演算法的JS實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.