10の古典のクイックソートソートアルゴリズム
彼らはそれがレビュー、レビューされたときに、今日我々は、高速ソートアルゴリズムについて何かを言っているか、C言語、実現するための空き時間を見つけるように、これらの日は突然、トップ10の古典的なソートアルゴリズムを振り返ったいです
ソートアルゴリズムテン古典的な速いソートアルゴリズムは、その主要なアイデアの一つである数字のセットを注文しないことです、参照番号として番号に最初に行くための数字のこの最初のセットでは、一般的には数字のこのセットを使用する最初のだろう最後の番号または参照番号として番号。ここでは、参照番号としてこの番号の最初のデータセットを選択します。2つのカーソルを設定し、我々は、我々はデータセットの最後の数字の後にカーソルをポイントすると、カーソルの前に最初の番号を指しています。基準デジタル数字よりも小さい、我々は増分(プラスワン、または後方に移動するプレカーソル)の前に、デジタルスイッチングプリカーソルと点の数、カーソルなり見つけたときに、カーソルから左。その後、我々は見つけるために、以前のカーソルを右を開始した参照番号より大きな番号を見つけたときに、我々は図番号を交換すると、カーソルが現在指しています。次いで、マイナスからカーソル(マイナス1は、または前方いずれかをカーソルを移動した後)。次いで、カーソルは前のカーソル、ソートの終わりに等しくなるまで上記のステップを繰り返す場合。
しかし、完了したデータの並べ替えのセットを完了するためにように上記ソート処理、左のベンチマーク図より、基準のほんの数は、右側に基づい桁に、ベースラインの数値よりも大きいことに留意すべきです。我々もさらにソート、実際には、我々は、アレイの一番上になりますする必要がベンチマーク数値より1小さい二つの部分に分割され、一部が参照番号よりも大きいので、我々はちょうどこれら二つの部分をソートするために、再び続いする必要がありますライン上で、左側の部分が最終的に分割され続けることができないまで、再び2つの部分に分割され、その後、ソートは完了です。次のように一部の学生はまだ理解していない可能性、と言ったので、私たちは、理解するために私たちを支援するための簡単な図を描きます:
1 / * 2 古典的なスケジューリングアルゴリズム:クイックソートアルゴリズムを達成するためにC言語 。3 * / 4の#include <stdio.hの> 5の#include <STDLIB.Hが> 6 // 関数ディスプレイアレイ素子 。7 ボイドディスプレイ(INT A [] 、INT LEN){ 8 INT I = 0 ; 9 ながら(私は< LEN){ 10 のprintf(" %のD "、A [I ++は]); 11 } 12である のprintf(" \ N- " ); 13である } 14 15 // 2つの数のスワップ機能 16 ボイドスワップ(INT *まず、INT * 秒){ 17。 INTのTEMPを、 18である TEMP = * まず、 19 * * =最初SECOND; 20 * SECOND = TEMP; 21である } 22である 23れる // 基準素子よりも大きい二つの部分に分けアレイ素子および参照素子未満である 24 INT(並べ替えをint []、int型スタート、INT {エンド) 25 INT標準= [スタート]; 26である INTロー= スタート; 27 int型高= 終了。 28 一方(低< 高){ 29 、一方(低<高&& [高]> = 標準){ 30 high-- 。 31 } 32 33 であれば(ロー< ハイ){ 34 スワップ(&[低]、および[高])。 35 低++ ; 36 } 37 38 ながら(= <低<高&& [低] 標準){ 39 ++低いです。 40 } 41 42 であれば低いです(<高い){ 43 スワップ(&[低]、および[高])。 44 high-- 。 45 } 46 } 47 [低] = 標準; 48 リターンが低いです。 49 } 50 51 // 快速排序函数 52 空隙クイック(INT []、int型開始、INT {端) 53 であれば(開始< エンド){ 54台の int型の POS = ソート(開始、終了)。 55 クイックソート(開始、POS- 1)。// 再帰呼び出し 56は、 クイックソート(A、+ POS 1、エンド); // 再帰呼び出し 57れる } 58 } 59 INTメイン(ボイド){ 60 INT LEN = 0 ; 61は、 INT * P; 62である int型I; 63である のprintf(" してくださいソートされた入力配列の長さ:\ N- " ); 64 scanfの(" %のD "、&LEN); 65 GETCHAR(); // 改行文字入力ストリームを歩く読み出さ 66 P =(INTを*)はmalloc(はsizeof(int型)* LEN); 67 のprintf(" 数値を入力します注文:\ N- " ); 68 のための(I = 0 ;私はLEN <;私は++ ){ 69 scanfの(" %のD "、&にP [I]); 70 } 71である のprintf(" 事前ソートされた配列:\ N- " ); 72 ディスプレイ(P、LEN); 73は クイックソート(P、0、lenの1。;) 74 のprintf(" ソートされた配列:N- \ "); 75 ディスプレイ(P、LEN); 76 無料(P); // メモリ解放 77 リターン 0 ; 78 }