js實現冒泡排序,快速排序,選擇排序

用js冒泡排序,快速排序,選擇排序

1.冒泡排序

冒泡排序是比較經典的排序方法,是一種用時間換空間的排序方法。我總結了一下它的特色:(1)它的時間複雜度是;(2)每一趟相鄰元素兩兩比較完畢就會產生最值(最大值);(3)每次比較完後下一趟就會少一個元素參與比較(即該趟比較的最大值)。
// 冒泡排序算法

function maopao(arr){
        for(var i=0;i<arr.length-1;i++){
            for(var j=i+1;j<arr.length;j++){
                // 若是前面的大,交換位置
                var temp=[];
                if(arr[i]>arr[j]){
                    temp = arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        return arr;
    }
    var arr = [1,9,3,7,2,8,3,99,44,1,6];
    maopao(arr);
    console.log("冒泡排序");
    console.log(arr);

快速排序

// 2.快速排序
一趟快速排序的算法是:   數組

1)設置兩個變量i、j,排序開始的時候:i=0,j=N-1;   ui

2)以第一個數組元素做爲關鍵數據,賦值給key,即 key=A[0];   指針

3)從j開始向前搜索,即由後開始向前搜索(j=j-1即j--), 找到第一個小於key的值A[j],A[i]與A[j]交換;   code

4)從i開始向後搜索,即由前開始向後搜索(i=i+1即i++), 找到第一個大於key的A[i],A[i]與A[j]交換;   排序

5)重複第三、四、5步,直到I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到爲止。 找到並交換的時候i, j指針位置不變。另外當i=j這過程必定正好是i+或j-完成的最後令循環結束)遞歸

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=[];
        // 循環,若是小於基準就放左邊,大於基準就放右邊
        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));

    }
    var arr2 = [999,9,3,7,24,8,3,99,44,1,6];
    console.log("快速排序")
    console.log(quickSort(arr2));

3.選擇排序

選擇排序相比冒泡排序不穩定,時間複雜度也是。選擇排序沒趟都會產生最小值,它不是相鄰元素的比較而是在該元素設置一個索引i。而後與數組的其餘元素依次比較(除了上一個索引值),直到找到小於該元素(索引j)時交換兩元素,接着繼續從i索引(此時已經不是原來的數值)值與索引j+1值比較。
// 選擇排序索引

function selectSort(arr){
        var minIndex;
        var temp;
        // 循環
        for(var i=0;i<arr.length-1;i++){
            minIndex=i;
            // 找到從i開始到最後的最小的數
            for(var j=i+1;j<arr.length;j++){
                if( arr[j] < arr[minIndex] ) {
                    minIndex = j;
                }
            }
        
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        } 
        return arr;
    }
    var arr3 = [99,9,3,7,24,8,3,99,44,1,6];
    
    console.log(selectSort(arr3));
相關文章
相關標籤/搜索