通常のパーティションでは、インデックスがi= jの各要素がchoisenピボットより小さく、インデックスm> jの各要素がピボットより大きいjがピボットであるという保証はない。正確に新しいピボット位置を返す場所パーティションアルゴリズムを別の場所に作成することは可能でしょうか? 最初は、最後のポジションでchoisenピボットを動かす必要がありましたが、最適な解決には至りません。ピボット位置を返す場所のパーティション
0
A
答えて
1
重要なことは、スワッピングのピボットを外しておくことです。ただし、境界線の1つに戻し、最後に正しい場所にスワップするときは、最初の点を除きます。
int partition(int *A, int low, int high) {
if (high <= low) return low; // in that case, partition shouldn't be called, but cater for it
int pivot_position = low; // or high, or low + (high-low)/2, or whatever
int pivot = A[pivot_position];
A[pivot_position] = A[high];
A[high] = pivot; // these two lines are unnecessary if pivot_position == high
int i = low, j = high-1;
while(i < j) {
while(i < j && A[i] <= pivot)
++i; // i == j or A[i] > pivot, and A[k] <=pivot for low <= k < i
while(i < j && A[j] > pivot)
--j; // i == j or A[j] <= pivot, and A[m] > pivot for j < m < high
if (i < j) {
int temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
if (A[i] <= pivot)
++i;
// now A[k] <= pivot for low <= k < i and A[m] > pivot for i <= m < high
A[high] = A[i];
A[i] = pivot;
return i;
}
+0
Cool、ありがとう、私の最初のアイデアは大丈夫でしたが、私はArray [1..n-1]でのみパーティションを実行する部分を欠いていて、それより大きな第1要素でピボットを入れ替えました。再度、感謝します :) – gr1ph00n
関連する問題
- 1. Avファンデーション撮影場所の位置
- 2. ピボットに基づいたパーティション配列
- 3. 場所に位置する境界を見つけるか?
- 4. ユーザの位置住所
- 5. three.jsオブジェクトを別の場所に配置する方法(グローバルワールド位置)
- 6. 現在の位置/場所の標準アイコン
- 7. divの位置が正しい場所にありません
- 8. ハイブのパーティションについての位置を知るには?
- 9. 最も正確な位置情報API(場所タイプ付き)
- 10. Mvvmcross場所プラグインの現在の位置と最後に見た場所がnullです
- 11. onItemClick ...私の配列内の位置を別の場所に渡す
- 12. ViewModelを置く場所
- 13. プロジェクトファイルを置く場所は?
- 14. 自分の場所である携帯端末の位置を取得する
- 15. アンドロイドのマップ位置がnullを返す
- 16. iOSコアの場所の設定viewDidLoadのユーザーの位置に固定する
- 17. Google Mapsの現在の位置と受信した場所をTextViewに保存
- 18. ClickOnce配置場所Web
- 19. Drupal 7 hook_cron - 置く場所
- 20. ヘッダー場所+コンテンツ配置
- 21. iPhoneのコアの位置開始の監視重要な場所の変更
- 22. addGlobalMonitorForEventsMatchingMaskマウス位置を返すだけ
- 23. Rubyのスーパークラスのユーティリティメソッドを置く場所
- 24. Google Maps API v3 MouseEventマウスの位置ではなくマーカの位置を返す
- 25. リソースを配置する場所
- 26. WPF MahApps.Metro - ResourceDictionariesを配置する場所
- 27. MVC - blittingデータを配置する場所
- 28. アンドロイドアプリケーションでデータベーステーブルを配置する場所
- 29. MySQLストアドプロシージャを配置する場所は?
- 30. サービス層を配置する場所
'jがピボットであるという保証はありません。つまり、あなたの質問が正しく分かっていれば、数字とピボットのリストを作って、ピボットの正しい位置が分かれていないのですか? – Ishtar
A = {5,3,2,6,4,1,3,7}を定義し、ピボット5としましょう。これを出力するパーティションを実行してください。{3,3,2,1,4,6、 5,7}とjdは4のインデックスです。 – gr1ph00n
あなたの例は間違っています。ピボットが5の場合は、5より小さい数字だけを左に置き、5より大きい数字だけを右にする必要があります(5は中央にしてください)。 – synepis