2016-04-29 22 views
0

私はCでdoubleの配列をソートしようとしていますが、期待される出力が得られません。実際の値の代わりにメモリアドレスをソートしているようです。私はvairablesを(* grade [i])に変更しようとしましたが、 "無効な型引数unary *"というエラーが出ます。ここに問題のコードのスナップショットがあります。Cでダブルの配列をソート

void sortGrade(double grade[], int n){ 
int i, j, swapped; 
double temp; 
for (i = 0; i < n; ++i) 
{ 
    for (j = i + 1; j < n; ++j) 
    { 
     if (grade[i] < grade[j]) 
     { 
      temp = grade[i]; 
      grade[i] = grade[j]; 
      grade[j] = temp; 
     }//end if 
    }//end inner for 
}//end outer for 
printf("After sort:\nGrade\n"); 
for (i = 0; i < n; ++i) 
{ 
    printf("%d\n", grade[i]); 
}//end for 
}//end sortGrade 

ご協力いただければ幸いです。 これは学校向けのものですが、割り当てはすでに提出されています。今は実際にそれを動作させる方法を理解しようとしています。

+12

あなたのソートアルゴリズムは大丈夫です:唯一のエラーはprintfのでした。印刷時にエラーが発生します。浮動小数点数を出力するには、 '%f'または'%g'を使用します。 –

+1

期待される出力が何であるか教えてくれないと言うのは難しいです。明らかに、コンパイラの警告をオンにする必要があるので、M Oehmsのアドバイスは必要ありません。それを修正するとソートされますが、期待通りのものではないかもしれません。 – gnasher729

+0

メモリアドレスをソートした場合、明らかにアイテムの順序は変わりません。配列要素は常に_メモリ_アドレスでソートされています。 – gnasher729

答えて

1

@M Oehmで述べたように、すでに、あなたは二重の値を印刷するときに代わりに%g%fを使用する必要があります。したがって

printf("%f\n", grade[i]); 

代わりの

printf("%d\n", grade[i]); 

を行う私は目標が手でソートアルゴリズムを書いていたことを想定しています。そうでない場合は、stdlibが提供するqsortを見てみるとよいでしょう。この関数はクイックソートソートアルゴリズムを実行します。

// qsort(array pointer, number of elements, size of one element, compare function); 
qsort(grade, n, sizeof(double), compare); 

要素を比較するには、比較機能も必要です。

// the compare function for double values 
static int compare (const void * a, const void * b) 
{ 
    if (*(double*)a > *(double*)b) return 1; 
    else if (*(double*)a < *(double*)b) return -1; 
    else return 0; 
} 
0

これは動作するはずです:

int i, j, swapped; 
    double temp; 
    for (i = 0; i < n; ++i) 
    { 
     for (j = i + 1; j < n; ++j) 
     { 
      if (grade[i] < grade[j]) 
      { 
       temp = grade[i]; 
       grade[i] = grade[j]; 
       grade[j] = temp; 
      }//end if 
     }//end inner for 
    }//end outer for 
    printf("After sort:\nGrade\n"); 
    for (i = 0; i < n; ++i) 
    { 
     printf("%f\n", grade[i]); 
    }//end for 
    }//end sortGrade 

アルゴリズムの作品。

printf("%f\n", grade[i]); //for double values 

またはより良い

printf("%lf\n", grade[i]); //for double values