2009-04-25 46 views
0

對不起,我確定這很簡單,但我很累,無法弄清楚。如何執行插入排序但檢查數組中元素的屬性而不僅僅是元素?

我有元件的陣列,每個元件是實際上的顆粒,其爲含有一個數據結構(在C語言的結構體),除其他事項外的顆粒當前位置(INT的x,y,z)表示。我想比較元素x位置不僅僅是元素本身。

望着pseudocode on wikipedia,我試圖修改它來比較我想要的屬性,但我覺得我已經做了一些(可能是簡單的)錯誤。

下面是我修改:

for (i = 1; i<length; i++) { 
    value = particles[i].position.x;  
    j = i - 1; 
    while (j >= 0 && particles[j].position.x > value) { 
     particles[j+1] = particles[j]; 
     j = j - 1; 
    } 
    particles[j+1] = particles[i]; 
} 

如果有人能指出我的錯誤,這將是巨大的!

亞當

+0

嗯,我猜想它不工作「COS的應用即將時髦寫的那部分之後,但它*可能*是別的東西,我只是覺得這是因爲我很累,花了很長時間才重寫它。 – 2009-04-25 21:44:54

回答

4

您的第二行用於存儲第i個元素的臨時副本,因爲while循環會覆蓋它。然而,在你的第二個最後一行中,你正在從覆蓋值中讀取。你的代碼更改爲以下,它應該工作的變化(評論):

for (i = 1; i<length; i++) { 
    value = particles[i]; // store particles[i] rather than it's x coordinate 
    j = i - 1; 
    while (j >= 0 && particles[j].position.x > value.position.x) { // changed 
     particles[j+1] = particles[j]; 
     j = j - 1; 
    } 
    particles[j+1] = value; // copy from temporary 
} 
+0

非常感謝,修復它! – 2009-04-25 21:46:52

1

您需要交換粒子對象,而不是x座標的值。嘗試:

for (i = 1; i<length; i++) { 
    value = particles[ i ]; 
    /* ... */ 
相關問題