ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptでのクイックソートの詳細説明

JavaScriptでのクイックソートの詳細説明

韦小宝
韦小宝オリジナル
2018-03-14 14:18:051747ブラウズ

この記事では、JavaScript でのクイック ソートについて説明します。JavaScript でのクイック ソートについて知らない場合、または JavaScript でのクイック ソートに興味がある場合は、この記事を見てみましょう。 point

クイックソートは、ソートアルゴリズムにおける分割統治のアイデアのもう1つの典型的な応用です。本質的に、クイック ソートは、バブル ソート に基づく再帰的分割統治法と見なされるべきです。

クイックソートの名前はシンプルで粗雑ですが、この名前を聞くとすぐにその存在の意味がわかります。これは、ビッグデータを処理するための最速のソートアルゴリズムの1つです。ワーストケースの時間計算量は O(n²) に達しましたが、これは優れており、ほとんどの場合、平均時間計算量が O(n log n) のソート アルゴリズムよりも優れたパフォーマンスを示します。どちらか知っています。 。 。幸いなことに、私の強迫性障害は再発しましたが、多くの情報を確認した結果、「アルゴリズム芸術と情報学コンペティション」に関して満足のいく答えを見つけました。

例えば、クイックソートの最悪の動作状況は O(n²) です。順序 シーケンスのクイックソート。しかし、その償却期待時間は O(n log n) であり、O(n log n) 表記に暗黙的に含まれる定数係数は非常に小さく、複雑さが安定していて O(n log n) に等しいマージ ソートよりもはるかに小さくなります。 n)。したがって、順序が弱いほとんどの乱数シーケンスでは、マージ ソートよりもクイック ソートの方が常に優れています。

クイックソートアニメーションのデモ

JavaScriptでのクイックソートの詳細説明

クイックソートJavaScriptコードの実装:

function quickSort(arr, left, right) {  
    var len = arr.length,  
        partitionIndex,  
        left = typeof left != 'number' ? 0 : left,  
        right = typeof right != 'number' ? len - 1 : right;  
  
    if (left < right) {  
        partitionIndex = partition(arr, left, right);  
        quickSort(arr, left, partitionIndex-1);  
        quickSort(arr, partitionIndex+1, right);  
    }  
    return arr;}function partition(arr, left ,right) {     //分区操作  
    var pivot = left,                      //设定基准值(pivot)  
        index = pivot + 1;  
    for (var i = index; i <= right; i++) {  
        if (arr[i] < arr[pivot]) {  
            swap(arr, i, index);  
            index++;  
        }          
    }  
    swap(arr, pivot, index - 1);  
    return index-1;}function swap(arr, i, j) {  
    var temp = arr[i];  
    arr[i] = arr[j];  
    arr[j] = temp;}

上記がこの記事のすべての内容です。あまり詳しくない場合は、両方を自分で実装できます。マスターするのは簡単です!

関連する推奨事項:

Jsのバブルソートとクイックソートの詳細な説明

以上がJavaScriptでのクイックソートの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。