選択ソートを利用し、データを小さい順に並べるプログラムについて

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

選択ソートを利用し、データを小さい順に並べるプログラムについて

#1

投稿記事 by onemonth » 9年前

当方まだ右も左も分からないプログラム初心者です。
このプログラムに1番目から順番に10~1までの数字を入力すると、6番目に入力した5が先頭に出てきてしまいます。
理由と対処法のご教授をお願いします。

コード:

/* データの整列 */
#include <stdio.h>

#define MAXNUM 10

int main(void)
{
	int x[MAXNUM];
	int i,ii,m,max,yobi;
	
	for (i = 0; i < MAXNUM; i++){
		printf("%d番目の整数:",i + 1);
		scanf("%d",&x[i]);
	}
	
	for(i = MAXNUM - 1;i > 0; i--){
		max = x[0];
		for(m = 0;m < i; m++)
			if(x[m] >= max){
				max = x[m];
				ii = m;
			}
			if(i != ii)
				yobi = x[i];
				x[i] = x[ii];
				x[ii] = yobi;
	}

	/* 整列済みのデータの表示 */
	for(i = 0;i < MAXNUM; i++)
		printf("%3d", x[i]);
	printf("\n");
		
	return (0);
}

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

Re: 選択ソートを利用し、データを小さい順に並べるプログラムについて

#2

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

コード:

/* データの整列 */
#include <stdio.h>

#define MAXNUM 10

int main(void)
{
	int x[MAXNUM];
	int i,ii,m,max,yobi;
	
	for (i = 0; i < MAXNUM; i++){
		printf("%d番目の整数:",i + 1);
		scanf("%d",&x[i]);
	}
	for(i = MAXNUM - 1;i > 0; i--){
		max = x[0];
		for(m = 0;m <= i; m++) /* x[i]のチェックが抜けている */
			if(x[m] >= max){
				max = x[m];
				ii = m;
			}
		if(i != ii){
			yobi = x[i];
			x[i] = x[ii]; /* こことこの下の行が常に実行されるので、データが壊れることがある */
			x[ii] = yobi;
		}
            
	}

	/* 整列済みのデータの表示 */
	for(i = 0;i < MAXNUM; i++)
		printf("%3d", x[i]);
	printf("\n");
		
	return (0);
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

onemonth

Re: 選択ソートを利用し、データを小さい順に並べるプログラムについて

#3

投稿記事 by onemonth » 9年前

細かいミスが多かったようですね、もっと勉強しなくては・・・
ご丁寧な解説ありがとうございました

閉鎖

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