バブルソート

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

バブルソート

#1

投稿記事 by ルーニー » 15年前

下のプログラムがなぜ降順で出力されるのか分かりません。不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。
ご教授お願いします。

  #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:バブルソート

#2

投稿記事 by ルーニー » 15年前

自己解決できました。

asd

Re:バブルソート

#3

投稿記事 by asd » 15年前

>不等号の向きが昇順になっているのに、どうして降順になるのかが理解できません。

最後の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++)にすると配列を先頭から表示していきますので、
昇順に表示されると思います。
----
自己解決されたようですが、どう自己解決したのかを書いておくと、
同じような問題で悩んでいる方のためになりますよ。

toyo

Re:バブルソート

#4

投稿記事 by toyo » 15年前

OKWave,教えてgooにもマルチポストしていたようなのでそちらで解決したのでしょう

閉鎖

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