js實現快速排序,冒泡排序,選擇排序,直接插入排序、希爾排序

1.思想:

快速排序應該是最常用的排序算法了。它的時間複雜度比冒泡排序,直接插入排序等低,且它的性能通常比其他的排序算法要好。和歸併排序一樣,快排也使用了分而治之的思想。將原始數組分爲小數組

1)首先,選取數組中間元素作爲基準點
2)創建兩個新數組left和right,遍歷原始數組,把比中間元素小的元素放在left數組, 把比中間元素大的元素放在right數組
3)left數組,中間元素,right數組合並
4) 使用遞歸,重複步驟1)和步驟2),直到left和right數組的長度都爲1, 退出遞歸
function quickSort( arr ){
        // 遞歸退出條件
        if( arr.length <= 1 ){
            return arr;
        }
        // 獲取中間元素下標
        var midIndex = Math.floor( arr.length / 2 );
        // 獲取中間元素並從原數組剔除
        var midValue = arr.splice( midIndex, 1);
        var left = [];
        var right = [];

        for( var i=0; i < arr.length; i++ ){
            if( arr[i] < midValue ){
                left.push( arr[i] );
            }
            else{
                right.push( arr[i] );
            }
        }

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

冒泡排序

   var arr = [4,1,2,8,11,2,43,21,33,5 ];


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

         console.log( arr );
     }

     bubbleSort(arr);

選擇排序

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( min !== i ){
                var temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }

        console.log(arr);
    }

var arr = [4,1,2,8,11,2,43,21,33,5];
selectSort(arr)

直接插入排序

function insertSort2(arr){
    for( var i=1; i<arr.length; i++ ){
        if( arr[i] < arr[i-1] ){
           var temp = arr[i];
            for(var j=i-1; arr[j] > temp; j-- ){
                arr[j+1] = arr[j]
            }
            arr[j+1] = temp;
        }
    }
    console.log(arr);
}

 var arr2 = [2,1,22,6,4,2,8,9,14];

insertSort2( arr2 );

希爾排序

“`

var arr = [4,2,8,21,33,5,8,7,6,1,1,1,2,2,3,5,6,7,3,77,99,12,31,4 ]; function shellSort( arr ){ var gap = arr.length; console.log(arr); do{ gap = parseInt( gap/2 ); console.log( 'gap:'+gap ); for( var i=gap; i
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章