2011-11-14 2 views
0

私は、ソートされていない数字の入力ファイルを取得し、クイックソートを使用してソートされた番号を持つ別のファイルを出力するプログラムを作成する必要があります。このプログラムは、整数を使った複数のテストケースの下でうまく動作しています。しかし、配列形式を '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; 
} 
+1

(そのためのタグがありますので)万が一、この宿題ですか? – R0MANARMY

+0

実際のコードを見せてください。 'main()'の 'quickSort()'の呼び出しはコンパイルされません。とにかく「サイズ+ 1」をやっているのはなぜですか? –

答えて

2

私はkはダブルここに:)

+0

Lol ...それらの夜のうちの1つだけ。ありがとう! – user1044889

1

あなたが倍増する必要があるかもしれないあなたのクイックソート方法の開始時にいくつかの値を初期化しているべきであると思います。特にkとp。また、パラメータとして2倍の高い値と低い値を取る必要があります。データ型用の貫通

void quickSort(double values[], double low, double high) 
{ 
    int start; 
    int end; 
    double k; 
    double p; 
    ... 

迅速な監査は、おそらくあなたの問題を解決します:)

+0

ピボット値は、必ず2倍であってはいけません。 – Macondo2Seattle

+0

あなたは絶対に正しいです、私は何を考えていたのか分かりません。 – Cody

関連する問題