ソートするプログラムが正しく動作しません

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

ソートするプログラムが正しく動作しません

#1

投稿記事 by アリーシャ » 14年前

初めまして。
大学の講義で、「50個の整数を読み込んで小さい順にソートするプログラムを作りなさい(バブルソートは用いないこと)」という課題が出て、そのプログラムを作成したのですが、どこか間違えているらしく、ソート前もソート後も整数の並び順が全く変わりません・・・
課題の提出期限が明後日までなので、非常に焦っています。
どうか、私が作成したプログラムの間違っているところを指摘して頂けないでしょうか。
よろしくお願いいたします。

私が作成したプログラムは、以下のようになっています。
#include<stdio.h>
#define SIZE 50

int main(void)
{
int a[SIZE],temp,k,i;

for (k=0; k<SIZE; k++)
scanf("%d",&a[k]);

printf("整列前:");
for (k=0; k<SIZE; k++) {
if (k%5 == 0)
printf("\n");
printf("%12d",a[k]);
}
printf("\n");

for (k=1; k<SIZE; k++) {
temp = a[SIZE];
if (a[k-1] > temp) {
i = k;
do {
a = a[i-1];
i--;
}while (i > 0 && a[i-1] > temp);
a = temp;
}
}

printf("整列後:");
for (k=0; k<SIZE; k++) {
if (k%5 == 0)
printf("\n");
printf("%12d",a[k]);
}
printf("\n");
return 0;
}

なお、50個の整数は講義の方で決められていて、
8181 5316 2570 692 46
52 6880 2108 1953 6584
1148 3740 5930 6970 6611
94 4268 9510 2986 8406
5378 2685 9804 137 9149
5456 7690 559 2382 9080
788 563 4396 3358 1256
4443 3410 8136 6552 5363
4721 7700 9103 652 4671
5715 746 8939 5226 3733
となっています。

アリーシャ

#2

投稿記事 by アリーシャ » 14年前

本当にすみません、ソースコードタグを使い忘れていました・・・
ソースコードタグを使うと、

コード:

#include<stdio.h>
#define SIZE 50

int main(void)
{
int a[SIZE],temp,k,i;

for (k=0; k<SIZE; k++)
scanf("%d",&a[k]);

printf("整列前:");
for (k=0; k<SIZE; k++) {
if (k%5 == 0)
printf("\n");
printf("%12d",a[k]);
}
printf("\n");

for (k=1; k<SIZE; k++) {
temp = a[SIZE];
if (a[k-1] > temp) {
i = k;
do {
a[i] = a[i-1];
i--;
}while (i > 0 && a[i-1] > temp);
a[i] = temp;
}
}

printf("整列後:");
for (k=0; k<SIZE; k++) {
if (k%5 == 0)
printf("\n");
printf("%12d",a[k]);
}
printf("\n");
return 0;
}
となります。

アバター
kimuchi
記事: 163
登録日時: 14年前
住所: 東京

Re: ソートするプログラムが正しく動作しません

#3

投稿記事 by kimuchi » 14年前

挿入ソートですね。
>>20行目
temp = a[SIZE];
とありますが、
temp = a[k];
ではありませんか?

アリーシャ

Re: ソートするプログラムが正しく動作しません

#4

投稿記事 by アリーシャ » 14年前

kimuchiさん、アドバイスありがとうございます。
仰る通り、作成したのは挿入ソートです。
確かに、a[SIZE];ではなく、a[k];が正しいと思います。
そのためそこの部分を直してみたのですが、やはり結果は同じでした。
自分でも何度かプログラムを見直しているのですが、私の知識では全く間違っている所が分からないです・・・

アバター
sizuma
記事: 8
登録日時: 14年前
住所: 鹿児島

Re: ソートするプログラムが正しく動作しません

#5

投稿記事 by sizuma » 14年前

コードは読んでませんが、20行目を指摘どおりに書き換えると、僕の環境ではちゃんと動いてますよ。
とりあえず参照 http://codepad.org/dYWrxRt7

アバター
kimuchi
記事: 163
登録日時: 14年前
住所: 東京

Re: ソートするプログラムが正しく動作しません

#6

投稿記事 by kimuchi » 14年前

一応こちらの実行結果です。

画像

環境はMicrosoft Visual C++ 2010 Express
結果はDebug,Release両ビルドで同じでした。

念のためコードも載せておきます。

コード:

#include<stdio.h>
#define SIZE 50
 
int main(void)
{
	int a[SIZE],temp,k,i;
 
	for (k=0; k<SIZE; k++)
		scanf("%d",&a[k]);
 
	printf("整列前:");
	for (k=0; k<SIZE; k++) {
		if (k%5 == 0)
			printf("\n");
		printf("%12d",a[k]);
	}
	printf("\n");
 
	for (k=1; k<SIZE; k++) {
		temp = a[k];
		if (a[k-1] > temp) {
			i = k;
			do {
				a[i] = a[i-1];
				i--;
			}while (i > 0 && a[i-1] > temp);
			a[i] = temp;
		}
	}
 
	printf("整列後:");
	for (k=0; k<SIZE; k++) {
		if (k%5 == 0)
		printf("\n");
		printf("%12d",a[k]);
	}
	printf("\n");
	return 0;
}
追記:
画像

最初にご投稿いただいたコードのDebug実行結果です。

アリーシャ

解決しました

#7

投稿記事 by アリーシャ » 14年前

a[SIZE];からa[k];に書き換える件について、自宅でMicrosoft Visual C++ 2008 Express Editionを使った場合はうまく動作しなかったのですが、大学にてLinuxでXemacsを使ったら正しく動作しました。
kimuchiさんのおかげで課題の提出が間に合いそうです。
本当にありがとうございました。

閉鎖

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