次の問題がわかりません。
NUM個のint型の配列を考える。このとき、この配列を小さい順に並び変える関数を作成し、その動作を確認しなさい。小さい順に並び替えるアルゴリズムは、以下のアルゴリズムを実装すること。
↓↓↓
配列の名前をa、配列の要素を6個として説明する。
Step1.1: a[5]とa[4]を比べて、順番が間違っていたら、a[5]とa[4]の値を入れ替える。
Step1.2: a[5]とa[3]を比べて、順番が間違っていたら、a[5]とa[3]の値を入れ替える。
………
Step1.n: a[5]とa[0]を比べて、順番が間違っていたら、a[5]とa[0]の値を入れ替える(必ずa[5]に一番大きい値が入っている)。
Step2.1: a[4]とa[3]を比べて、順番が間違っていたら、a[4]とa[3]の値を入れ替える。
Step2.2: a[4]とa[2]を比べて、順番が間違っていたら、a[4]とa[2]の値を入れ替える。
………
↑↑↑
○環境
・OS:Linux
・コンパイラ名とバージョン:gcc
・言語:C
以上です。よろしくお願いいたします。
配列を小さい順に並び変える関数
Re:配列を小さい順に並び変える関数
> 配列の名前をa、配列の要素を6個として説明する。
配列の要素数が4個、5個、6個あたりの場合について、
手で入れ替えるとしたらどうするかを紙に書き出します。
そこには、必ず何らかの法則があります。
後は、その法則に従い、要素数をNUM個の場合に一般化してください。
配列の要素数が4個、5個、6個あたりの場合について、
手で入れ替えるとしたらどうするかを紙に書き出します。
そこには、必ず何らかの法則があります。
後は、その法則に従い、要素数をNUM個の場合に一般化してください。
Re:配列を小さい順に並び変える関数
#include <stdio.h> #include <stdlib.h> #define NUM (6) int a[NUM], w, i, j; void init() { srand((unsigned int)time(NULL)); for(i=0;i<NUM;i++) { a=rand(); } } void sort() { for(i=NUM-1;i>0;i--) { for(j=i-1;j>=0;j--) { if(a<a[j]) { w = a; a = a[j]; a[j] = w; } } } } void disp() { for(i=0;i<NUM;i++) { printf("a[%d]=%d\n", i, a); } printf("\n"); } int main() { init(); disp(); sort(); disp(); return 0; }
Re:配列を小さい順に並び変える関数
> ソースコード全体の作成をお願いしたいです。
人間、考えることをやめたら退化していくだけです。
ご自分の脳をフル回転させてください。
人から与えられたソースコードを鵜呑みにするのでなく、
アルゴリズムを自分で考えてソースコードに落としていく作業こそが
プログラミングの醍醐味です。それを放棄してはいけません。
人間、考えることをやめたら退化していくだけです。
ご自分の脳をフル回転させてください。
人から与えられたソースコードを鵜呑みにするのでなく、
アルゴリズムを自分で考えてソースコードに落としていく作業こそが
プログラミングの醍醐味です。それを放棄してはいけません。