• 締切済み

C言語

3. 整数配列data の,data[left]からdata[right-1]の最小値がある添字番号を返す関数 int min_ind_ary(const int data[ ], int left, int right) で最小値が複数あるときは,一番小さい添字を返すようにするにはどうしたらよいのかわかりません? 途中経過↓ #include <stdio.h> int min_ind_ary(const int data[10],int left,int right) { int i,min = 0; for( i = 1; i < left; i++){ if(data[min] < data[i]) min = i; } return min; } void print_ary(const int data[10], int size){ int i; for(i = 0; i < 10; i++){ printf("%2d", data[i]); } } void sort_ary (int data[10], int size) { int i; for(i = 0; i < size - 1; i ++ ) { int min, work; min = min_ind_ary(data, i, size); work = data[min]; data[min] = data[i]; data[i] = work; } return; } int main(void) { int data[10] = {1, 6, 4, 8, 2, 3, 5, 9, 7, 4}; print_ary(data, 10); sort_ary(data, 10); print_ary(data, 10); return 0; }

みんなの回答

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

> int min_ind_ary(const int data[10],int left,int right) > { > int i,min = 0; > > for( i = 1; i < left; i++){ > if(data[min] < data[i]) min = i; > } > return min; > } この関数は「整数配列dataの,data[left]からdata[right-1]の最小値がある添字番号を求める」ものなのに、 rightがどこにも使われていません。 rightの値を使わずに「data[left]からdata[right-1]の最小値がある添字番号」を求めるのは 多分無理ですよね。 なのでrightの値もちゃんと使ってあげる必要があります。 今のプログラムのfor文は「for( i = 1; i < left; i++)」となっています。 これだとループのスタートはi = 1, 最後はi = left - 1という意味になりますよね (つまりdata[1]からdata[left-1]までのデータを探索しています)。 この部分を「data[left]からdata[right-1]までのデータを探索する」となるように書き換えてください。 他にも何か間違いがあるかもしれないので、 上手くいかなかったら補足欄に書いて教えてください。

関連するQ&A