2017-05-31 6 views
1

最初の要素をピボットとするクイックソートパーティションアルゴリズムを実装しようとしていますが、最後の要素をピボットとして検討しました。誰かが私が次の擬似コードで間違っている場所を教えてください。最初の要素をピボットとして使用したQuicksortパーティションアルゴリズムの実装

/* Taking first element of array as pivot and movig all elements 
smaller than pivot left to pivot and greater tto its right */ 
// L is leftmost index, R is rightmost index 

Partition(A[],L,R) 
{ 
    pivot = A[L] 
    i = L-1 
    for (j =L to R) 
    { 
     // If current element is smaller than or equal to pivot 

     if (A[j] <= pivot) 
     { 
      i++; // increment index of smaller element 
      swap A[i] and A[j] 
     } 
    } 
    swap A[i + 1] and A[L]) 
    return (i + 1) 
} 
+0

quicksortはC++です。 QsortはCのクイックソートに相当します。 –

+1

あなたは間違っていますか?何があなたをそう思わせたのですか?そしてあなたはあなたの[rubber duck](https://en.wikipedia.org/wiki/Rubber_duck_debugging)に擬似コードを説明しようとしましたか? –

+0

最後の要素でピボットの正しいコードがわかっている場合は、最初と最後の要素を入れ替え、最後の要素でピボットのコードを実行します。それに少しの努力が必要です。 –

答えて

0

いくつかの試行錯誤や熟考の後、私は間違いを見つけました。ここに正しいアルゴリズムがあります。

Partition(A[],L,R) 
{ 
    pivot = A[L] 
    i = L 
    for (j =L+1 to R) 
    { 
     if (A[j] <= pivot) 
     { 
      i++; // increment index of smaller element 
      swap A[i] and A[j] 
     } 
    } 
    swap A[i] and A[L]) 
    return (i) 
} 
+0

このアルゴリズムでは、配列 '[3、-1,1,5,4]'は '[1、-1,3,5,4]'になります。あなたは、左側と右側のアルゴリズムを続行する必要があります。 – Neil

+0

これはクイックソート@Neilで起こることですが、OPはパーティショニングパートの擬似コードだけを書いていることを指定しています。 –

関連する問題