ページ 1 / 1
C言語 ソート
Posted: 2016年10月20日(木) 19:45
by けろりん
これのどこが間違えているのでしょうか。
実行しようとすると、
関数の引数が小さすぎます
となります。
コード:
#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]);
}
Re: C言語 ソート
Posted: 2016年10月20日(木) 20:42
by hide
print_array の宣言と実装には3つの引数があるのに
12行目で print_array(a, 10); と2つの引数で呼び出しているからではないですか?
というかエラーは全文貼ってほしいです。予想で答えるのは不毛です。
Re: C言語 ソート
Posted: 2016年10月20日(木) 21:37
by STR
バブルソート内部のifのブロックの中
置き換えが終わったのちに
print_array( a , 10 , i );
なのかなと思いましたが?
Re: C言語 ソート
Posted: 2016年10月21日(金) 00:57
by 超初級者
けろりん さんが書きました:
実行しようとすると、
コンパイルしたら。実行には至ってません。
けろりん さんが書きました:
関数の引数が小さすぎます
だから?その関数の引数は2個?3個?どっちですか?
Re: C言語 ソート
Posted: 2016年10月22日(土) 19:43
by かずま
けろりん さんが書きました:
これのどこが間違えているのでしょうか。
エラーメッセージに行番号が出ていませんか?
関数名も出ているはずです。
けろりん さんが書きました:
実行しようとすると、
もっと具体的に書いてください。例えば、Visual Studio で F5キーを押したとか、
コマンドプロンプトやシェルのコマンドラインで gcc bubble.c を入力したとか。
けろりん さんが書きました:
関数の引数が小さすぎます
となります。
エラーメッセージを、全部コピペしてください。
「小さい」と「少ない」は意味が違います。
Re: C言語 ソート
Posted: 2016年10月22日(土) 19:54
by fm
関数void print_array(int a[], int n,int count)
{
//省略
}
の引数は
変数nとcountは同じ値でないと正常動作しないのではないですか?
Re: C言語 ソート
Posted: 2016年10月22日(土) 20:50
by みけCAT
fm さんが書きました:関数void print_array(int a[], int n,int count)
{
//省略
}
の引数は
変数nとcountは同じ値でないと正常動作しないのではないですか?
「正常動作」の定義(≒意図する仕様)がわかりませんが、countは出力にしか影響しないので、
aが有効な配列の要素をへのポインタで、nがaが戦闘要素を指す配列の要素数以下なら、
nとcountの値が違っても未定義動作にはならないはずです。
Re: C言語 ソート
Posted: 2016年10月22日(土) 22:08
by fm
みけCAT さんが書きました:
「正常動作」の定義(≒意図する仕様)がわかりませんが、countは出力にしか影響しないので、
aが有効な配列の要素をへのポインタで、nがaが戦闘要素を指す配列の要素数以下なら、
nとcountの値が違っても未定義動作にはならないはずです。
すみませんでした。不勉強でした。別のスレッドでも書きましたが、
ポインタを理解していないので、理解できませんでした。
Re: C言語 ソート
Posted: 2016年10月23日(日) 03:28
by 超初級者
とりあえずこんな感じでしょう。
コード:
#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言語 ソート
Posted: 2016年10月23日(日) 08:49
by かずま
超初級者 さんが書きました:とりあえずこんな感じでしょう。
関数名が bubble_sort なのに、アルゴリズムの実装を
バブルソートから選択ソートに変更したのはなぜですか?