C言語(ソート)で分からないことがありました。
『バブル,選択,挿入の整列関数に必要な関数を付加し,任意個(<100)の正数(0以上100以下)を対象とするバブル,選択,挿入の3種の整列プログラムを完成せよ.
1)ソートの途中経過がわかるように表示を工夫せよ.
2)整列処理中に交換、並べ替えが起きた場合,交換や並べ替えがおきた要素を文字"*"で,そうでない要素を文字"."で表した文字列を出力せよ.整列対象のデータ(配列)内で,データで移動しているものが*となる.』という課題が出て、
#include <stdio.h>
int BubSort(int x[ ], int n);
void ShowData(int x[ ], int n);
int main(void);
#define NUM_DATA 10
int x[ ] = {9,8,7,6,5,4,3,2,1,0};
int BubSort(int x[ ], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] > x[j]) {
temp = x[j];
x[j] = x[j - 1];
x[j - 1]= temp;
}
}
}
}
void ShowData(int x[ ], int n)
{
int i;
for (i = 0; i < n ; i++)
printf("%d", x);
}
int main(void)
{
printf("ソート前:\n");
ShowData(x, NUM_DATA);
printf("\n\n");
BubSort(x, NUM_DATA);
printf("\n\nソート後:\n");
ShowData(x, NUM_DATA);
return 0;
}
とすることはできたのですが、要素の並び替えがおきた回で*や.が出力する方法がわからないので教えてください。
C言語(ソート)の課題で分からないことがありましt
Re:C言語(ソート)の課題で分からないことがありましt
if (x[j - 1] > x[j]) { temp = x[j]; x[j] = x[j - 1]; x[j - 1]= temp; printf("%d <-> %d\n", j - 1, j); }まず↑のように書き換えたプログラムを実行してみてください。
次にprintfの部分を*と.で表現できたら完成です。
Re:C言語(ソート)の課題で分からないことがありましt
>要素の並び替えがおきた回で*や.が出力する方法がわからないので教えてください。
例えば、要素0と要素4が入れ替わったら
*...*.....
となれば良いのでしょうか。
要素の並び替えが起きたところに0~9までのforループを新たに作り、if分などで入れ替わりが起きた要素の場合を[*]を、そうでない場合[.]を標準出力してあげるのはどうでしょう。
例えば、要素0と要素4が入れ替わったら
*...*.....
となれば良いのでしょうか。
要素の並び替えが起きたところに0~9までのforループを新たに作り、if分などで入れ替わりが起きた要素の場合を[*]を、そうでない場合[.]を標準出力してあげるのはどうでしょう。