初心者ですがクイックソートについて質問があります

■ このスレッドは過去ログ倉庫に格納されています
1仕様書無しさん
垢版 |
2019/11/23(土) 14:12:25.88
副プログラムを再帰的に呼び出すのは分かるのですが、配列の最初と最後の添字を入れる変数に
最初に具体的な数字を入れなくてもいいのはなぜですか?
2019/11/23(土) 14:19:05.06
使うときまでには入ってるだろ
3仕様書無しさん
垢版 |
2019/11/23(土) 14:26:34.93
>>2
擬似言語で学習しているのですが、最初の添字を入れる変数Leftと最後の添字を入れるRightを宣言して
副プログラムの引数に設定すれば自分でLeftに0やRightにnを入れなくても勝手に認識してくれるのですか?
2019/11/23(土) 14:31:37.68
俺がしってるどんな実言語もしない

ちょっとコード貼ってってみてくれんか
5仕様書無しさん
垢版 |
2019/11/23(土) 14:55:43.94
その擬似言語ってのが
この板の誰にもわからんと思う
6仕様書無しさん
垢版 |
2019/11/23(土) 15:34:19.78
>>4

○大域:整数型:array[9] = {5,4,7,6,8,3,1,2,9}
○副プログラム:QuickSort {整数型:array [ ], 整数型:left, 整数型 : right}
○整数型 : left, right, i, k, w

・i ←left + 1
・k←right

■ i < k  /* 条件がtrueなら繰り返し */
|
| ■ array[i] < array [left] かつ i < right
| | ・i ← i + 1
| ■
|
| ■array[k] >= array[left] かつ k > left
| | ・k ←k - 1
| ■
|
| ↑ i < k /* 条件がtrueなら以下の処理 */
| | ・w ← array [i]
| | ・array[i] ← array[k]
| | ・array[k] ←w
| ↓
7仕様書無しさん
垢版 |
2019/11/23(土) 15:34:57.04
>>6 の続き

↑ array[left] > array [k]
| ・w ← array[left]
| ・array[left] ← array[k]
| ・array[k] ← w


↑left < k - 1
| ・QuickSort (array, left, k - 1)


↑k + 1 < right
| ・QuickSort (array, k+1, right)
8仕様書無しさん
垢版 |
2019/11/23(土) 15:36:34.23
>>5
基本情報技術者試験で使うやつです
9仕様書無しさん
垢版 |
2019/11/23(土) 16:38:12.71
>>8
ああ、なるほど。
これはleftとrightは引数であって
指定するという意味です。
QuickSortを一番最初に呼び出すときに、
Sortする範囲の下のIndexをLeft,上のIndexをRightに
指定すると考えればいいわけでして、
その最初の呼び出すところは、QuickSortを呼び出すユーザ側(?)
ということですので、
問題文には記載されていないということです。

次回から(2回目以降)の呼び出しは再帰呼び出しですから
自分自身のなかからleftとrightはセットして呼び出されています。

| ・QuickSort (array, left, k - 1)


↑k + 1 < right
| ・QuickSort (array, k+1, right)

これら2つの呼び出しのところで、
それぞれrightがk-1にセットされて
leftのところがk+1にセットされているでしょ?

わかりますか?
10仕様書無しさん
垢版 |
2019/11/23(土) 16:56:44.88
>>9

そうか、このプログラムを使う時に最初はユーザーが
QuickSort {ソートしたい配列, 0, 末の添字}
と入力するからプログラムの記述にはLeftとRightの初期値が必要ない
という理解でOKですか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況