• ベストアンサー

選択法(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

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>引数で検索する配列を示す事ができない場合 グローバルな変数にするしかないと思います。

ken6791
質問者

お礼

BLUEPIXYさんありがとうございました。 教えていただいた通りやってみます。

その他の回答 (1)

  • keikan
  • ベストアンサー率42% (75/176)
回答No.1

プロトタイプ宣言がない状態で、 partition関数がselection関数から呼ばれています。 プロトタイプ宣言しないのであれば、関数の位置を入れ替えて、実際に使われる前に関数が構築されるようにしましょう。

ken6791
質問者

お礼

keikanさん、貴重なご意見ありがとうございました。

ken6791
質問者

補足

引数で検索する配列を示す事ができない場合、どのようにすればpartition関数やselection関数でその配列を認識させる事ができるでしょうか? 私の場合partition,selection両関数の中に検索したい配列を書く事しか考えつきませんでした。 もっといい方法があるような気がしております。 よろしく御願いいたします。