2011-12-25 7 views
-1

私はちょうどリサーチのためにこれにクイックソートを実装しようとしています。しかし、私はどのようにクイックソートは、このアルゴリズムを見て、私はバブルの並べ替えを使用してどのように実装するか分からないが、私は先に進んでクイックソートを実装するかわからない?どのようにimlpementにすべきか分かりませんQuicksort

# choose pivot 
swap a[1,rand(1,n)] 

# 2-way partition 
k = 1 
for i = 2:n, if a[i] < a[1], swap a[++k,i] 
swap a[1,k] 
→ invariant: a[1..k-1] < a[k] <= a[k+1..n] 

# recursive sorts 
sort a[1..k-1] 
sort a[k+1,n] 

これは、このanimationは本当に便利です

int main() 
{ 
srand(time(NULL)); 
    int length = 250000; 
    double arr[length]; 
    for(int i = 0; i<length; ++i) arr[i] = rand(); 
    // mergeSort2(arr, arr+length-1); 


     for(int i = 0; i < (length-1); i++) 
    { 
     for(int j = i+1; j < length; j++) 
    { 
      if(arr[i] > arr[j]) 
      { 
       swap(arr[i], arr[j]); 
      } 
     } 
    } 

    ofstream ofs("input.txt"); 
    for(int i = 0; i<length; ++i) ofs << i << " " << arr[i] << endl; 
} 
+1

これは最初に見ましたか? http://www.csanimated.com/animation.php?t=Quicksort – CppLearner

+1

今すぐコードを見て間違っていることはありません。人々は通常、実際の実装を5秒で忘れてしまいます。どのような問題がメカニズムを理解するか(QSの仕組み) – CppLearner

+0

バブルソートを使用する(または考えてみる)ことはお勧めしません。とにかくコードの問題は何ですか? –

答えて

4

以下の私のコードです。

クイックソート(ダイブ統治)の中心部には、単に次のようになります。

  1. 実際にはピボット

    • としての要素を選択我々はドンほとんどの時間」どちらかが気にする。あなたが証明するように、(フロント/エンド/ミッドの代わりに)ランダムにピボットをピックアップすると、ワーストケースに遭遇する可能性が最小限に抑えられます。
    • テスト目的のために、中間の男を選ぶのが良い選択です。
  2. パーティション(L =左、R =右)

    目標は、2つのセットに自分の元の配列を分割することである(実質!!)

    Sで

    S_left = {X - {ピボット}:

    } xよりも小さいかまたはピボットに等しいS_right S IN = {X - {ピボット}:X以上ピボットに等しい}

    表記を容易にする。

    • [L] ... [I-1] [I 1 +] ... [R]は以上である[I]
    • 以下でありますa [i]
    • となり、最後にa [i](ピボット要素)は適切な場所になければなりません。

戦略

ありQSをプログラムする2つの一般的な方法であるが、一般的にQSは、3つのパラメータを(アレイ、ロー、ハイ)かかりは、の左端指標ここ低いです配列、および高は、アレイの右端の指標である

Initially 
l = low-1 
r = high 

advances l when A[l] less than or equal to pivot 
decrements r when A[r] is greater than or equal to pivot 
swap A[l] and A[r] 
repeat this process until l is greater than or equal to r, and swap (pivot, A[l]) 
Call QuickSort(A, left, l-1) 
Call QuickSort(A, l+1, right) 

私はあなたの実装のほとんどを与えている(2,3、5,10、必ずしも0、長さ-1をすることができます)。 小さなサンプル(サイズ9は私には合理的だと思われます)を紙に書いてください。実装が正しいまでは、randを使用しないでください。

は、この配列を試してみてください:

MyArrayという= 9,6,2,5,11,4,20,1,3

私は明日よりを書くことができます。

関連する問題