C言語 ソート

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

C言語 ソート

#1

投稿記事 by けろりん » 8年前

これのどこが間違えているのでしょうか。
実行しようとすると、
関数の引数が小さすぎます
となります。

コード:

#include <stdio.h>


void bubble_sort(int a[], int n);
void print_array(int a[], int n,int count);


int main(void) {
	int a[10] = { 20,6,55,74,3,45,13,87,46,30 };

	bubble_sort(a, 10);
	print_array(a, 10);
	return 0;

}

void bubble_sort(int a[], int n) {
	int i, j, okikae;
	for (i = 0; i < n - 1; i++) {
		for (j = n - 1; j > i; j--) {
			if (a[j - 1] > a[j]) {
				okikae = a[j];
				a[j] = a[j - 1];
				a[j - 1] = okikae;
			}
		}
	}
}

void print_array(int a[], int n,int count) {
	int i;
	printf("%d:", count);
	for (i = 0; i < n - 1; i++) {
		printf("%2d,", a[i]);
	}
	printf("%2d\n", a[i]);
}

hide

Re: C言語 ソート

#2

投稿記事 by hide » 8年前

print_array の宣言と実装には3つの引数があるのに
12行目で print_array(a, 10); と2つの引数で呼び出しているからではないですか?

というかエラーは全文貼ってほしいです。予想で答えるのは不毛です。

STR

Re: C言語 ソート

#3

投稿記事 by STR » 8年前

バブルソート内部のifのブロックの中
置き換えが終わったのちに
print_array( a , 10 , i );
なのかなと思いましたが?

超初級者
記事: 56
登録日時: 10年前

Re: C言語 ソート

#4

投稿記事 by 超初級者 » 8年前

けろりん さんが書きました: 実行しようとすると、
コンパイルしたら。実行には至ってません。
けろりん さんが書きました: 関数の引数が小さすぎます
だから?その関数の引数は2個?3個?どっちですか?

かずま

Re: C言語 ソート

#5

投稿記事 by かずま » 8年前

けろりん さんが書きました: これのどこが間違えているのでしょうか。
エラーメッセージに行番号が出ていませんか?
関数名も出ているはずです。
けろりん さんが書きました: 実行しようとすると、
もっと具体的に書いてください。例えば、Visual Studio で F5キーを押したとか、
コマンドプロンプトやシェルのコマンドラインで gcc bubble.c を入力したとか。
けろりん さんが書きました: 関数の引数が小さすぎます
となります。
エラーメッセージを、全部コピペしてください。
「小さい」と「少ない」は意味が違います。

fm

Re: C言語 ソート

#6

投稿記事 by fm » 8年前

関数void print_array(int a[], int n,int count)
{
//省略
}
の引数は
変数nとcountは同じ値でないと正常動作しないのではないですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語 ソート

#7

投稿記事 by みけCAT » 8年前

fm さんが書きました:関数void print_array(int a[], int n,int count)
{
//省略
}
の引数は
変数nとcountは同じ値でないと正常動作しないのではないですか?
「正常動作」の定義(≒意図する仕様)がわかりませんが、countは出力にしか影響しないので、
aが有効な配列の要素をへのポインタで、nがaが戦闘要素を指す配列の要素数以下なら、
nとcountの値が違っても未定義動作にはならないはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

fm

Re: C言語 ソート

#8

投稿記事 by fm » 8年前

みけCAT さんが書きました: 「正常動作」の定義(≒意図する仕様)がわかりませんが、countは出力にしか影響しないので、
aが有効な配列の要素をへのポインタで、nがaが戦闘要素を指す配列の要素数以下なら、
nとcountの値が違っても未定義動作にはならないはずです。
すみませんでした。不勉強でした。別のスレッドでも書きましたが、
ポインタを理解していないので、理解できませんでした。

超初級者
記事: 56
登録日時: 10年前

Re: C言語 ソート

#9

投稿記事 by 超初級者 » 8年前

とりあえずこんな感じでしょう。

コード:

#include <stdio.h>

void bubble_sort(int *a, int n)
{
   int i, j, t;

   for (i = 0; i < n - 1; i++) {
       for (j = i + 1; j < n; j++) {
           if (a[i] > a[j]) {
               t = a[j], a[j] = a[i], a[i] = t;
           }
       }
   }
}

void print_array(int *a, int n)
{
   int i;

   printf("%d:", n);
   for (i = 0; i < n; i++) {
       printf("%2d%c", a[i], i != n - 1 ? ',' : '\n');
   }
}

int main(void)
{
   int a[] = { 20, 6, 55, 74, 3, 45, 13, 87, 46, 30 };
   int sz = sizeof(a) / sizeof(a[0]);

   bubble_sort(a, sz);
   print_array(a, sz);
   return 0;
}

かずま

Re: C言語 ソート

#10

投稿記事 by かずま » 8年前

超初級者 さんが書きました:とりあえずこんな感じでしょう。
関数名が bubble_sort なのに、アルゴリズムの実装を
バブルソートから選択ソートに変更したのはなぜですか?

閉鎖

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