1. 程式人生 > >幾大排序思想(由javascript編寫)

幾大排序思想(由javascript編寫)

quick 交換 ice 最大數 splay 分享 javascrip text emp

Hello!我是super喵二~~~今天練了幾道面試題,突然覺得好久沒有好好歸納 過排序算法了。以前都是用C/java編寫排序,這次用js來總結下五大排序算法吧:

1、冒泡排序(常用及常考排序算法):

  不用多說,冒泡就是一個一個浮上去~~~也就是說需要一個一個比較:

技術分享
<script type="text/javascript">
    //冒泡排序,一次一次的相鄰兩個數比,直到把最大數找出來
    var array = [5,2,4,6,8];
    var temp;
    function sort(array){
       for(var i=0;i<array.length-1;i++){
               
for(var j=0;j<array.length-i-1;j++){ if(array[j]>array[j+1]){ temp=array[j+1]; array[j+1]=array[j]; array[j]=temp; } } } console.log(array); } sort(array)
// [2,4,5,6,8] </script>
Bubble

2、插入排序:

  插入插入,當然需要插在該插的位置啦。簡單理解就是每循環到一個數,就把它前面的數當做一個數組,然後插在數組裏該插的位置:

技術分享
<script type="text/javascript">
    var array = [5,2,4,6,8];
    var temp;
    //插入排序是從第一個數開始,把第一個當成數組,第二個數與它比較,插入。再將前兩個看成數組,第三個來比較插入該插的位置,依次類推
    function sort(array){
       
for(var i=0;i<array.length;i++){ for(var j=0;j<i+1;j++){ if(array[i]<array[j]){ temp=array[i]; array[i]=array[j]; array[j]=temp; } } } console.log(array); } sort(array) // [2,4,5,6,8] </script>
Insert

3、選擇排序:

  一次一次選擇出小的數(按升序來的話),首先認為第一個數最小,就依次比較它後面的數,有更小的就記錄位置,將這個更小的記錄之後,如果後面還有數,就以這個更小數為基準,再繼續找,如果有比更小還小的,就記錄位置,然後繼續找,直到找到最小的然後和第一個數交換。接下來就從數組中的第二個數開始,依次~~~~

  

技術分享
<script type="text/javascript">
    var array = [5,2,4,6,8];
    var temp;
    //選擇排序,從第一個數開始比較,遇到小與它的記錄位置,再將這個數與它後面的數比較,如果沒有就交換這兩個數,如果有,則繼續比較。
    function sort(array){
       for(var i=0;i<array.length-1;i++){
               var index=i;
               for(var j=i+1;j<array.length;j++){
                   if(array[index]>array[j]){
                       index=j;
                   }
                   
               }
               temp=array[i];
               array[i]=array[index];
               array[index]=temp
       }
       console.log(array);
    }

    sort(array) // [2,4,5,6,8]
</script>
Select

4、快速排序:

  快速排序,眾所周知,速度最快,很多公司面試都會考這個,手寫的話還是有點難。大家可以主要掌握下C語言版本,用其他語言寫就很容易了。。。我是參照阮一峰老師寫的,主要是找一個基準元素,比基準元素小的在左邊,比基準元素大的在右邊,然後左右看成兩個數組,分別找各自的基準元素再分組~~~直到最後~~

技術分享
<script type="text/javascript">
    var array = [5,2,4,6,8];
    var temp;
    //快速排序:先找一個基準元素,比它小的放在左邊數組,大的放在右邊數組,然後又分別在左邊和右邊數組中找出基準元素進行比較
    var quicksort=function(array){
       if (array.length<=1) {
               return array;
       }else{
               var priotIndex=Math.floor(array.length/2);
               var priot=array.splice(priotIndex,1)[0];
               var left=[];
               var right=[];
               for (var i = 0; i < array.length; i++) {
                   if (array[i]<priot) {
                       left.push(array[i]);
                   }
                   else {
                       right.push(array[i]);
                   }
               }
               return quicksort(left).concat([priot],quicksort(right));
       }
    }

    console.log(quicksort(array));

</script>
Quick

5、合並排序:

  合並排序類似快排,主要也是才用遞歸,分組比再合,具體實現如下:

技術分享
//歸並排序:從兩個兩個比較,然後四個一組比較,然後8個一組比較
    var array = [5,2,4,6,8];
    var merge=function(left,right){
        var arr=[];
        while(left.length>0&&right.length>0){
            if (left[0]<right[0]) {
                arr.push(left.shift());
            }else{
                arr.push(right.shift());
            }
        }
        return arr.concat(left,right);
    }



    var mergeSort=function(array){
        if (array.length==1) {
            return array;
        }else if (array.length>1) {
            var middle=Math.floor(array.length/2),
            left=array.slice(0,middle),
            right=array.slice(middle);
            return merge(mergeSort(left),mergeSort(right));

        }
    }

    console.log(mergeSort(array));
Merge

暫時就這五個,排序算法還有很多種,堆排序,隨機快排。。。。這就自行了解吧,還有比較每個算法的時間復雜度,空間復雜度來決定誰更好,視情況而定吧~~

幾大排序思想(由javascript編寫)