C言語(ソート)の課題で分からないことがありましt

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Kei

C言語(ソート)の課題で分からないことがありましt

#1

投稿記事 by Kei » 15年前

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;
}


とすることはできたのですが、要素の並び替えがおきた回で*や.が出力する方法がわからないので教えてください。

たいちう

Re:C言語(ソート)の課題で分からないことがありましt

#2

投稿記事 by たいちう » 15年前

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

#3

投稿記事 by やっくん » 15年前

>要素の並び替えがおきた回で*や.が出力する方法がわからないので教えてください。
例えば、要素0と要素4が入れ替わったら
*...*.....
となれば良いのでしょうか。

要素の並び替えが起きたところに0~9までのforループを新たに作り、if分などで入れ替わりが起きた要素の場合を[*]を、そうでない場合[.]を標準出力してあげるのはどうでしょう。

閉鎖

“C言語何でも質問掲示板” へ戻る