ページ 11

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

Posted: 2015年10月09日(金) 19:17
by onemonth
当方まだ右も左も分からないプログラム初心者です。
このプログラムに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);
}

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

Posted: 2015年10月09日(金) 22:21
by みけCAT

コード:

/* データの整列 */
#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);
}

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

Posted: 2015年10月10日(土) 00:57
by onemonth
細かいミスが多かったようですね、もっと勉強しなくては・・・
ご丁寧な解説ありがとうございました