迅速な並べ替え、並べ替えを選択して、直接挿入して、泡の並べ替えのjavascriptは実現します.

5757 ワード

クイックソート:配列の最初の要素を基準要素として選択し、左右の走査配列は、基準要素以上の要素を配列の右に置いて、基準要素以下の要素を左に置いて、基準要素を中間に置く.次の配列の基準要素の左側は基準要素に等しいもので、右のものは基準要素に等しいものより大きいです.左と右に自分自身を再帰的に呼び出します.なお、配列の右側に左の要素が配置されている場合は、i,j元素の交換位置ではなく、i位置を直接カバーする要素であるべきです.
    function quickSort(arr, s, e) {
        var i = s,
            j = e,
            temp;
        if (i < j) {//    
            temp = arr[s];//          ,              
            while (i != j) {
                while (i < j && arr[j] >= temp) j--;
                arr[i] = arr[j];//             ,    i     (  i       ,         )
                while (i < j && arr[i] <= temp) i++;
                arr[j] = arr[i];//             ,    j     
            }
            arr[i] = temp;//       i,j        ,        
            quickSort(arr, s, i - 1);//      ,i         ,      i-1
            quickSort(arr, i + 1, e);
        }
    }
直接挿入順序:配列は秩序領域と無秩序領域に分けられ、無秩序領域の最初の要素を秩序領域の正しい位置に挿入する.最初は、秩序ゾーンは一つの要素しかありませんでした.(一つの要素しかないので、秩序化されています.)挿入される度に、秩序ゾーン長+1が配列長に等しいまで続きます.
 function insertSort(arr) {
    for (var i = 1; i < arr.length; i++) {//         ,   i=1           
        var j = i - 1;//i               ,             ,        
        var temp = arr[i];//           ,                 
        while (j >= 0 && arr[j] > temp) {// arr[j] temp    ,  arr[j]     temp  ,          ,                 ,  j>=0                          ,    -1    ,     
            arr[j + 1] = arr[j];//   temp        
            j--
        }
        j++;//     j     temp    ,temp          ,  j  +1
        arr[j] = temp;
    }
 }
直接並べ替えの再帰版を挿入します.普通版から明らかな再帰関係が見られます.だからもう一つ再帰的なものを書きます.再帰的な長所はコードが少ないと思います.簡単に見えるだけです.欠点はアルゴリズムの詳細がないので、分かりにくいです.ここで重要な部分は秩序エリアの長さが1ずつ増加していますので、次の区間の右端点は+1になります.
function insertSort2(arr, e) {
    var temp = arr[e];
    var e1 = e - 1;
    if (e < arr.length) {
        while (e1 >= 0 && arr[e1] >= temp) {
            arr[e1 + 1] = arr[e1];
            e1--;
        }
        e1++;
        arr[e1] = temp;
        insertSort2(arr, e + 1);
    }
}
並べ替えを選択します.同様に秩序エリアと無秩序区に分けられています.直接挿入順序との違いは、無秩序エリアから最小のものを選ぶたびに、順序ゾーンの末尾に並べばいいです.
function selectSort(arr) {
    for (var i = 0; i < arr.length - 1; i++) {//             ,   n-1     ,           ,     
        var minIndex = i;//          ,            ,    
        for (var j = i; j < arr.length; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        arr[i] = [arr[minIndex], arr[minIndex] = arr[i]][0];//    ,        ,              
    }
}
泡の並べ替え
 function bubbleSort(arr) {
    for (var i = 0; i < arr.length - 1; i++) {
        for (var j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                arr[j] = [arr[j + 1], arr[j + 1] = arr[j]][0];
            }
        }
    }
 }