- 締切済み
クイックソートの再帰呼び出し後の記述について(特に配列の範囲)
アルゴリズムをすこしかじってみているのですが、いきなり躓いてしまいました。詳しい方にお聞きします。クイックソートの再帰呼び出し後のプログラムの記述がよくわかりません。(特に配列の範囲) QuickSort(Head,Tail)というプログラムがあるとします。最初の一連の処理が終わり、再帰呼び出しの部分で、 QuickSort(Head,Left-1)という前半部分を指定した再帰呼び出しとQuickSort(Right+1,Tail)という後半部分を指定した再帰呼び出しがされるとします。ここまでは分かるのですが、この再帰呼び出しのプログラムの実行を記述するとなるとどうなるのでしょうか?特に分からないのはこの再帰呼び出しでさらに再帰呼び出しされるQuickSortのカッコ内の配列の範囲がどのようになるのか、何か特別な記述はされるのかということです。あとソートの必要のないレベルまで来た場合の処理(記述)も分かりません。どなたかご教授願えないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nag0720
- ベストアンサー率58% (1093/1860)
クイックソートは、ピボット(分割値)を決め、データをピボット以下とそれ以外の2つに分けることを繰り返す方法です。 クイックソートの手順は、 (1)ピボットを決め、データをピボット以下とそれ以外に分ける (2)前半部分をクイックソートする(再帰呼び出し) (3)後半部分をクイックソートする(再帰呼び出し) これだけです。 >特に分からないのはこの再帰呼び出しでさらに再帰呼び出しされるQuickSortのカッコ内の配列の範囲がどのようになるのか、何か特別な記述はされるのかということです。 何が分からないのかが分かりませんが、QuickSort(Head,Tail)ですることは、HeadからTailまでの区間の配列データを処理するだけです。それ以外の範囲のデータは考える必要はありません。 >あとソートの必要のないレベルまで来た場合の処理(記述)も分かりません。 クイックソート(再帰呼び出し)するかどうかは、データ数で判断します。 データ数が1以下の場合はすでにソートされていますから、再帰呼び出しする必要はありません。
- cametan_42
- ベストアンサー率62% (164/264)
補足
理解力がなくすみません。(1)「QuickSort(Head,Tail)ですることは、HeadからTailまでの区間の配列データを処理するだけです。それ以外の範囲のデータは考える必要はありません。」とのことですが、質問で、再帰呼び出し後のHeadからTailの配列の始端と終端を書いたのですが、これが実行されるとその次の配列の始端と終端はどう示されるかということなのですが・・あと、「クイックソート(再帰呼び出し)するかどうかは、データ数で判断します。」とお書き頂きましたが、これはプログラムでどのように記述されるのでしょうか?