私は、ソートされていない数字の入力ファイルを取得し、クイックソートを使用してソートされた番号を持つ別のファイルを出力するプログラムを作成する必要があります。このプログラムは、整数を使った複数のテストケースの下でうまく動作しています。しかし、配列形式を 'int'から 'double'に変更すると、プログラムの値のソートが正しく行われません。私を最も困惑させるのは、それが矛盾しているということです。たとえば、入力 "5,4,3,2,2.1"は正常に機能しますが、入力 "5,4,3,2.2,2.1"はsegフォルトを引き起こします。どんな助けもありがとう。ありがとう。ダブルタイプの値でクイックソートを実装
void swap(double *x, double *y)
{
double tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int pivot(int i, int j)
{
return ((i+j)/2);
}
void quickSort(double values[], int low, int high)
{
int start;
int end;
int k;
int p;
if (low < high)
{
p = pivot(low,high);
swap(&values[low],&values[p]);
k = values[low];
start = (low+1);
end = high;
while (start <= end)
{
while ((start <= high) && (values[start] <= k))
{
start++;
}
while ((end >= low) && (values[end] > k))
{
end--;
}
if (start < end)
{
swap(&values[start],&values[end]);
}
}
swap(&values[low],&values[end]);
quickSort(values,low,(end-1));
quickSort(values,(end+1),high);
}
}
int main()
{
...
quickSort(array, 0, (size+1);
...
return 0;
}
(そのためのタグがありますので)万が一、この宿題ですか? – R0MANARMY
実際のコードを見せてください。 'main()'の 'quickSort()'の呼び出しはコンパイルされません。とにかく「サイズ+ 1」をやっているのはなぜですか? –