選択ソート、バブルソート、バケットソートやクイックソート

道のソートを選択

ここでは、小から大順に例を使用して
最初の第一の最小ターム想定される
第二の:最小のアイテムと指標を記録し、より小さなアイテムがある場合、最初のを使用してアイテムの背面とのコントラストをオンし続ける
最初3:サイクル、アイテム交換位置との最初の項目が完了した後。
第四:第二サイクルは、第2項の逆数のサイクルを完了するために、第二から始まり、などが決定されます。
コードの実装:

var arr = [11,2,32,4,54,6,3];
 for(var k=0;k<arr.length-1;k++){
            var min   = arr[k];
            var index = k;
            for(var i = k+1; i<arr.length;i++){
                
                if(arr[i]<min){
                    // 只记录数字不换位
                    min = arr[i];
                    index = i
                }
            }
            arr[index] = arr[k];
            arr[k] = min;
        }
        console.log(arr)

ここに画像を挿入説明

バブルソートのソート

バブルソート方法をソートすることも選択肢であるが、別の方法で最小値を見つけるために採用します。同様に、一例として昇順に
第二の交換位置であれば第一よりも小さい第一及び第二の大きさを比較し、第一の
第二:反復配列、これはソートされていない要素を最小にします;その正しい位置に
第三の第一の正しい位置に最後から二番目の要素まで。

	for(k = 0;k<arr.length - 1;k++){
            for(i=0;i<arr.length - 1-k; i++){
                if(arr[i]>arr[i+1]){
                    var team = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = team;
        }
        }
        }
        console.log(arr);

改良:
このリストが注文された、との比較を注文するよりも多くのサイクルを継続する場合は、それは無意味です。私たちは前にループに入ることができ、trueに、ループ内で、falseにブール値変数を為替操作のイベントをブール変数を設定します。ループの最後には、ブール変数がまだfalseの場合、このリストが注文されていることを、全体のプロセスの必要性が継続しないことを証明。

var bool = false;
        for(k = 0;k<arr.length - 1;k++){
            for(i=0;i<arr.length - 1-k; i++){
                if(arr[i]>arr[i+1]){
                    var team = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = team;
                    bool = true;
        }
        }
        if( bool ===false){
            break;
        }
        }

道のソートバレル

バケットは、ソート極端なソート、より多くのメモリフットプリントです。配列の添字が配置されていないランダムな配列の添字が何であるか、関係なく、注文されていないことを私たちは皆知っている
新しい配列の必要性、新しい配列の添字として古いアイテムの配列を持つ:最初の
二つ目は:任意であります各新しい配列割り当てる
第三の:空の元の配列を、新しい配列は、元の配列インデックスを増加させるために一枚ずつ取り出されます。

        var arr = [3,2,5,7,10]
        var bocket = [];
        for(var i = 0 ;  i < arr.length ; i ++){
            bocket[arr[i]] = 1;
        }
        arr.length = 0;
        // 用for in 取出更好,比for 循环节省执行次数;
        for(var attr in bocket){
            // 因为 for in 之中取出的 attr 是字符串,那么我们需要进行一波转换;
            arr.push(Number(attr));
        }
        console.log(arr);

高速な方法のソート

これは、基本的な戦略は、2つの小さな配列が同じように続け、次いで、アップ分割する必要がなく、より高い性能要件のために再帰的デジタルより多くの時間を二つの配列の再帰的であり、
最初の:左右、焦点を見つけます。インデックスと値の中点検索
2つの空の配列の確立、そのように命名:第二のを。中点大きなアレイの右側よりも左側のアレイの中点よりも小さく、
第三は、1つだけの配列または配列が空になるまで数分を押し続けて、再帰的に終了

 // 找中点 分左右!;
        var arr = [2,5,1,3,7,4];
        function quickSort( arr ){
            if(arr.length === 1 || arr.length === 0){
                return arr;
            }
            var mid_index = parseInt(arr.length / 2);
            var mid_num   = arr[mid_index];
            var left  = [];
            var right = [];
			for(var i = 0 ; i < arr.length ; i ++){
                // 不要和自己比对;
                if( i === mid_index){
                    continue;
                }
                if( arr[i] > mid_num ){
                    right.push(arr[i]);
                }else{
                    left.push(arr[i]);
                }
            } 
            //注意:concat第一个参数必须转换成数组; => [mid_num]
            return quickSort(left).concat( [mid_num] , quickSort(right) );
        }
        var res = quickSort( arr )
        console.log(res);
リリース6元記事 ウォン称賛17 ビュー2452

おすすめ

転載: blog.csdn.net/htcvive/article/details/104741916