質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1209閲覧

バブルソート、選択ソート、挿入ソートのデータの比較回数,交換回数,代入回数

XDD

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/06/09 02:31

バブルソート、選択ソート、挿入ソートのデータの比較回数,交換回数,代入回数を数える部分を追加したプログラムを書きたいのですがどうしてもエラーが出てしまいますどこがおかしいのでしょうか?
また、数え方は合っているのでしょうか?

//CODE//
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void swap(int *x, int *y);
void bubblesort( int n, int x[100], int order );
void insertionsort(int n, int y[], int order);
void selectionsort(int n, int z[], int order);

int main(){
int n=100,order,i,x[100]={},a=0,b=0,c=0,y[100]={},z[100]={};
srand((unsigned int)time(NULL));
for(i = 0; i < n ; i++)
{
x[i] = rand();
y[i] = rand();
z[i] = rand();
}

printf("降順なら1,昇順なら0を入力してください:");
scanf("%d",&order);

bubblesort(n,x,order);
insertionsort(n,y,order);
selectionsort(n,z,order);

return 0;
}

void bubblesort( int n, int x[ ], int order ){
int tmp,i,j=0,a=0,b=0,c=0;

if (order==0) { for (i = 0; i < n; i++) { c++; for (j = i + 1; j < n; j++) { a++; if (x[i] > x[j]) { tmp = x[i]; x[i] = x[j]; x[j] = tmp; b++; } } } printf("[バブルソート] 比較回数 %d 交換回数 %d 代入回数 %d \n", a,b,c); }else{ for (i = 0; i < n; i++) { c++; for (j = i + 1; j < n; j++) { a++; if (x[i] < x[j]) { tmp = x[i]; x[i] = x[j]; x[j] = tmp; b++; } } } printf("[バブルソート] 比較回数 %d 交換回数 %d 代入回数 %d \n", a,b,c); }

}

void swap(int *x, int *y){
int temp,c=0,b=0;
temp = *x; c++;
*x = *y; b++;
*y = temp;
c++;
}

void insertionsort(int n, int y[ ], int order){
int i, j,a=0,b=0,c=0;

if (order==0)
{
for(i = 1; i < n; i++){
j = i;
a++;
while( (j > 0) && (y[j-1] > y[j]) ){
swap(&y[j-1], &y[j]);
j--;
}
}

printf("[挿入ソート] 比較回数 %d 交換回数 %d 代入回数 %d \n", a,b,c);
}else{
for(i = 1; i < n; i++){
j = i;a++;
while( (j > 0) && (y[j-1] > y[j]) ){
swap(&y[j-1], &y[j]);
j--; b++;
}
}
printf("[挿入ソート] 比較回数 %d 交換回数 %d 代入回数 %d \n", a,b,c);
}

void selectionsort( int n, int z[100], int order ){
int i, j,a=0,b=0,c=0;
int min;

if (order==0)
{
for(i = 0; i < n; i++){
min = i;
for(j = i + 1; j < n; j++){
if(z[j] < z[min]) min = j;
a++;
}
swap(&z[i], &z[min]);
}
printf("[選択ソート] 比較回数 %d 交換回数 %d 代入回数 %d \n", a,b,c);
}else{
for(i = 0; i < n; i++){
min = i;
for(j = i + 1; j < n; j++){
if(z[j] > z[min]) min = j;
a++;
}
swap(&z[i], &z[min]);
}
printf("[選択ソート] 比較回数 %d 交換回数 %d 代入回数 %d \n", a,b,c);

}
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/06/09 02:36

どのようなエラーが出るか、「そのまま」提示してください。
XDD

2022/06/09 02:39

undefined reference to `selectionsort' collect2.exe: error: ld returned 1 exit status
tatsu99

2022/06/09 03:42

ソースのアップ方法です。 以下のようにすると、きちんとソースが表示されます。 </>をクリックします。 ```ここに言語を入力 コード ``` と表示されるので ```① ② ``` ①の箇所にCと入力し ②の箇所にソースをコピペして貼り付けます。 そうすると、きちんと表示されます。
guest

回答1

0

ベストアンサー

selectionsort() の定義が insertionsort() の中に書いてあります。外に出してください。
具体的には、ソースコードの最後の } を消して、void selectionsort(... の行の前に } を入れます。

エディタの機能や clang-format などのツールでソースを整形するようにしましょう。

投稿2022/06/09 04:02

int32_t

総合スコア20845

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問