2011-11-14 29 views
0

我必須創建一個程序,該程序需要輸入未排序數字的文件,並使用Quicksort輸出帶有排序數字的另一個文件。這個程序在使用整數的多個測試用例下運行良好。但是,當我將數組格式從'int'更改爲'double'時,我的程序無法正確排序值。最讓我困惑的是它不一致。例如,輸入「5,4,3,2,2.1」可以正常工作,但輸入「5,4,3,2.2,2.1」會導致seg錯誤。任何幫助,將不勝感激。謝謝。使用雙值類型實現Quicksort

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'? –

回答

1

你在你快速排序的方法可能需要是雙打開始初始化幾個值。特別是k和p。此外,它需要採取雙高和低值作爲參數。

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

通過對數據類型可能會解決你的問題:)

+0

樞軸值絕對不應該是雙倍。 – Macondo2Seattle

+0

你是完全正確的,我不知道我在想什麼。 – Cody