2015-11-09 84 views
1

因此,我有這樣一個結構數組,它在一場競賽中持有有關競爭對手的數據。這是如何建立結構:在函數中對結構數組進行排序

struct competitor { 
     int compID; 
     char name[30]; 
     int swimSecs; 
     int cyclSecs; 
     int runSecs; 
     int totalSecs; 
    }; 

我使用這個排序陣列從小到大安排競爭對手。 compNum是競爭對手

void sort(struct competitor** a) { 

    int n = compNum; 


    struct competitor temp; 
    int i, j; 

    for (i = 1; i < n; i++) 
     for (j = 0; j < n - i; j++) { 



      if (a[j]->totalSecs > a[j + 1]->totalSecs) { 


       temp = *a[j]; 

       a[j] = a[j + 1]; 

       *a[j + 1] = temp; 

      } 
     } 


    return; 
} 

數量但似乎使用溫度和周圍交換結構時,它似乎複製一些已經由用戶輸入的結構,並覆蓋現有的結構數據。任何人都可以看到爲什麼這可能會發生,你將如何解決它?謝謝你在前進

+1

爲什麼不使用編譯器附帶的'qsort'實現? – owacoder

+0

@owacoder我必須自己實現一個排序算法。 – Unfitacorn

+0

@lurker我必須自己實現排序算法。 – Unfitacorn

回答

1

您應該交換結構,這使得代碼是:

temp = *a[j]; 
*a[j] = *a[j + 1]; // copy the structure 
*a[j + 1] = temp; 

或者,更優選的效率,只是交換指針:

struct competitor *temp; 
... 

temp = a[j]; 
a[j] = a[j + 1]; 
a[j + 1] = temp; 

的代碼目前正在做一些這兩個,這將無法正常工作。

+0

謝謝你的迴應,我和@lurker解決方案一樣,它和你生產的第一個解決方案一樣。再次感謝你。 – Unfitacorn

+0

@Unfitacorn我是Lurker誰發佈了這個答案 - 我刪除了我的評論,使其成爲一個答案。 :)如果你發現我的答案可以接受,如果你不介意檢查「接受」,我會非常感激。 :) – lurker