条件として
・ランダムな数字を100個生成して、昇順にバブルソート
・ソート前、ソート後の数字を見やすいように10個ずつ並べて改行する
・普通のバブルソートは並び替えが終了しているのに"データ数-1"繰り返されますが、"データ数-1"行う前に昇順になっていることもあるのでそれを判定してできるだけ少ない回数でバブルソートをする
というのがあります。
質問は
・できるだけ少ない回数でバブルソートをするという条件にwhileを使ってみたがコンパイルできない
・乱数を生成させているが、実行しても同じ数字が表示される
という点です。
宜しくお願いします。
#include <stdio.h>
#include <stdlib.h>
#define NUM_DATA 100
void BubSort(int num[], int n);
void datasee(int num[], int n);
int main(void);
/* バブルソートを行う */
void BubSort(int num[], int n)
{
int i, j, temp;
while (num[j] > num[j - 1]) {
for (j = n - 1; j > i; j--) {
if (num[j] > num[j - 1]) { /* 前の要素の方が大きかったら */
temp = num[j]; /* 交換する */
num[j] = num[j - 1];
num[j - 1] = temp;
}
}
//datasee(num, NUM_DATA);
}
}
void datasee(int num[], int n)
{
int i = 1;
while (n--) {
printf("%3d ", *num++);
i++;
if (n % 10 == 0) {
printf("\n");
}
}
printf("\n");
}
int main(void)
{
int num[100], i;
for (i = 0; i < NUM_DATA; i++) {
num[i] = rand();
}
printf("(Before)\n");
datasee(num, NUM_DATA);
printf("\n");
BubSort(num, NUM_DATA);
printf("\n");
printf("(After)\n");
datasee(num, NUM_DATA);
printf("\n");
}