下のプログラムがなぜ降順で出力されるのか分かりません。不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。
ご教授お願いします。
#include <stdio.h>
#define MAX 10000
int main (int argc, const char * argv[/url]) {
int N,data[MAX],d[MAX],j,k,w,x,a;
x=0;
a=1;
do{printf("学生番号を入力してください\n");
scanf("%d",&N);
if(N!=0){printf("得点を入力してください\n"); scanf("%d",&data[N]);}x++;}
while(N!=0);
for(j=0; j<x;j++){
d[j]=data[j];}
for(j=0; j<x;j++)
{for(k=0;k<x-j-1;k++){
if(d[k]>d[k+1]){
w=d[k];
d[k]=d[k+1];
d[k+1]=w;}}}
printf("昇順での整列結果\n");
for(j=x-1;j>0;j--){
printf("%d位 %d点\n",a,d[j]);a++;}
return 0;
}
バブルソート
Re:バブルソート
>不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。
最後のprintf文の添え字に注目してください。
そこにカギがあります。
昇順に並べ替えた配列を逆順に出力しています。
(昇順の逆順は降順ですよね)
なのでfor文をfor(j=1;j<x;j++)にすると配列を先頭から表示していきますので、
昇順に表示されると思います。
----
自己解決されたようですが、どう自己解決したのかを書いておくと、
同じような問題で悩んでいる方のためになりますよ。
最後のprintf文の添え字に注目してください。
そこにカギがあります。
printf("昇順での整列結果\n"); for(j=x-1;j>0;j--){ printf("%d位 %d点\n",a,d[j]);a++;}添え字であるjはx-1から1まで(0より大きい間1ずつ減らしていく)変化しますので、
昇順に並べ替えた配列を逆順に出力しています。
(昇順の逆順は降順ですよね)
なのでfor文をfor(j=1;j<x;j++)にすると配列を先頭から表示していきますので、
昇順に表示されると思います。
----
自己解決されたようですが、どう自己解決したのかを書いておくと、
同じような問題で悩んでいる方のためになりますよ。