- ベストアンサー
選択法(selection sort)について
選択法について質問させていただきます。 選択法で基準値(pivot)を使用し、K番目に小さい要素を見つけるプログラムを作成しています。以下は私が作成したプログラムですが、 行き詰まってしまいました。どなたか教えていただけないでしょうか?ちなみに学校の宿題で引数は変えれない状態です。 #include<stdio.h> int selection(int low,int high,int k){ int pivotpoint; int s[]={27,10,12,20,25,13,15,22}; if(low==high) return s[low]; else{ partition(low,high,pivotpoint); if(k==pivotpoint) return s[pivotpoint]; else if(k<pivotpoint) return selection(low,pivotpoint-1,k); else return selection(pivotpoint+1,high, k); } } void partition(int low,int high,int pivotpoint){ int i,j; int pivotitem; int tmp; int s[]={27,10,12,20,25,13,15,22}; pivotitem=s[low]; j=low; for(i=low+1;i<=high;i++){ if(s[i]<pivotitem){ j++; tmp=s[i]; s[i]=s[j]; s[j]=tmp; } } pivotpoint=j; tmp=s[low]; s[pivotpoint]=s[low]; s[low]=tmp; } main(){ int num; int s[]={27,10,12,20,25,13,15,22}; num=selection(0,7,3); printf("the third number is %d?n", num); } エラーメッセージ selection.c:20: error: conflicting types for 'partition' selection.c:10: error: previous implicit declaration of 'partition' was here
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>引数で検索する配列を示す事ができない場合 グローバルな変数にするしかないと思います。
その他の回答 (1)
- keikan
- ベストアンサー率42% (75/176)
プロトタイプ宣言がない状態で、 partition関数がselection関数から呼ばれています。 プロトタイプ宣言しないのであれば、関数の位置を入れ替えて、実際に使われる前に関数が構築されるようにしましょう。
お礼
keikanさん、貴重なご意見ありがとうございました。
補足
引数で検索する配列を示す事ができない場合、どのようにすればpartition関数やselection関数でその配列を認識させる事ができるでしょうか? 私の場合partition,selection両関数の中に検索したい配列を書く事しか考えつきませんでした。 もっといい方法があるような気がしております。 よろしく御願いいたします。
お礼
BLUEPIXYさんありがとうございました。 教えていただいた通りやってみます。