1.数字を読み込むごとに, それまでに入力された数値が格納された配列の最後の要素から, 先頭に向かって順に大小の比較を行う. これにより、読み込んだ数字が入るべき位置がわかる.
2.読み込んだ数字が入るべき箇所を空けるために、 既に記憶されている配列の要素のうち、 この数字よりも大きな数字をひとつ後ろにずらす。 空いた箇所に読み込んだ数字を代入する.
3.次に入力される数字の処理へ移る.また0が入力されると終了。
正整数: 17
正整数: 3
正整数: 9
正整数: 4
正整数: 0
入力された整数は小さい順に 0, 3, 4, 9, 17 です.」
となればよいのですが自分のコードでは
入力するとそのまま並び替えられずに表示されてしまいます。
何か間違いに気づいた方、またこういうやり方ならもっと効率がいいなど教えてくれる方がいましたらよろしくお願いします。
#include<stdlib.h>
#include<stdio.h>
#define buffer 256
int main(){
//変数定義
int x[501];
int i=0,k,j;
char buf[buffer];
while(1){
printf("正の整数: ");
//変数に値の代入
fgets(buf,buffer,stdin);
x[i]=atoi(buf);
//後ろから判別を繰り返す
for(k=i;k>0;k--){
//小さいかどうか判別
if(x[i]<=x[k]){
for(j=i;j>=k+1;j--){
//要素を後ろにずらす
x[j+1]=x[j];
}
//値を代入
x[k+1]=x[i];
//for文から抜ける
break;
}
}
if(x[i]==0)break;
i++;
}
printf("入力された整数は小さい順に");
for(k=0;k<=i-1;k++){
printf(" %d,",x[k]);
}
printf(" %d です",x[i]);
return 0;
}