2013-03-25 85 views
1

我正在進行選擇排序。損壞的選擇排序C

我的問題是,如果您從「無效排序」中刪除我的所有代碼,程序將運行。只要你把所有的代碼放回去,「void sort」也不會去「void sort」中的第一個「printf」函數。我不知道什麼把一切都掛起來了。

這裏的第二個問題是,該函數應該做到這一點:

運行通過它們陣列[]與VARS:X(起點)溫度(臨時最低數目)和k(當前數目。 )它應該 - 對於每次迭代 - 從x開始,設置temp = x,設置k =(x + 1),然後k ++直到到達數組的末尾。如果array [k]小於array [temp],它應該設置temp等於k。然後在最後:交換數組[x]和數組[temp]並重新開始在(x + 1)

當它工作之前,我得到的唯一結果是x = 7(列表),它只會打印最後一個數字。 :/ wat做

此外,不需要,但是一個次要問題我該怎麼做我從void函數返回排序的數組?全球變數?還要別的嗎?

#include <stdio.h> 
#define SIZE 8 

void sort(int array[], int size) 
{ 
    printf("starting sort, declaring vars..."); 
    int temp, placeholder, x, k; 
    printf("setting x..."); 
    x = 0; 
    printf("size(%d), i(%d)", size, x); 
    printf("starting sort loop..."); 
    while (x < (size - 1)); 
    { 
     k = (x + 1); 
     temp = x; 
     while(k < size) 
     { 
      if(array[k] < array[temp]) 
       temp = k; 
      k++; 
     } 
     printf("array[%d] is %d from array[%d]\n", x, array[temp], temp); 
     placeholder = array[temp]; 
     array[temp]= array[x]; 
     array[x] = placeholder; 
     printf("%d ", array[x]); 
     x++; 
    } 
    printf("\n"); 
} 

int main(void) 
{ 
    int numbers[SIZE] = {4, 15, 16, 50, 8, 23, 42, 108 }; 
    int i; 
    for (i = 0; i < SIZE; i++) 
     printf("%d ", numbers[i]); 
    printf("\ncounted and sorting...\n"); 
    sort(numbers, SIZE); 
    for (int i = 0; i < SIZE; i++); 
     printf("%d", numbers[i]); 
    printf("\n"); 
    return 0; 
} 
+3

嘗試在所有打印語句之後放置'\ n',您的輸出可能會被緩衝 – Claudiu 2013-03-25 17:46:32

+0

您是完全正確的。我做到了,現在它凍結在「無效排序」中的「while(x <(size - 1))」循環中。 – user2208569 2013-03-25 17:51:56

回答

2

我不知道這是否是書面的問題或在您的代碼中的錯誤,但

while (x < (size - 1)); 

不正確。它什麼都不做,所以會無限循環。取出分號以獲得預期的效果。同樣,

for (int i = 0; i < SIZE; i++); 

不應該有分號。此外,您不能在適當的C中聲明i,並且i已被聲明,所以最好將它留在for (i = 0; ...

+0

我認爲就是這樣。 'x'和'size'在循環中永遠不會改變,所以它只是永遠迭代。 – Claudiu 2013-03-25 18:03:00

+0

右側右側。有我的詭計。現在全部修好了! – user2208569 2013-03-25 18:42:29

+0

嗨!如果您發現這個答案是最有幫助的,您可以點擊左上方的複選標記,以「接受」答案。這可以讓後來的訪問者看到哪個答案最有用。 – raptortech97 2013-03-25 21:02:07