2011-11-08 68 views
0

我正在做一個c插入排序,它工作正常,除了排序後第一個數字總是一個奇怪的負數和程序錯誤了。c插入排序錯誤

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

void insertionSort(int list[], int last){ 
    int hold; 
    int walker; 
    int current; 
    int count; 

    count = 0; 
    for (current = 1; current <= last; current++){ 
     hold = list[current]; 
     for (walker = current - 1; 
      walker >= 0 && hold < list[walker]; walker--){ 
        list[walker + 1] = list[walker]; 
      } 
     list [walker + 1] = hold; 
     count++; 
    } 
    printf("\n\nHow many passes to sort?\n%d\n\n", count); 
    return; 
} 

int main(int argc, char *argv[]) 
{ 
    int numbers[100]; 
    int i; 

    srand(time(NULL)); 
    for (i = 0; i < 100; i++){ 
     numbers[i] = rand() % 100; 
    } 
    printf("Unsorted Numbers\n-------- -------\n"); 
    for (i = 0; i < 100; i++){ 
     printf("%d,", numbers[i]); 
    } 
    insertionSort(numbers, 100); 
    printf("\nSorted Numbers\n-------- -------\n"); 
    for (i = 0; i < 100; i++){ 
     printf("%d,", numbers[i]); 
    } 
    system("PAUSE"); 
    return 0; 
} 

回答

3

您將在循環中超出數組大小。當current = last時,list [last]是list [100],這是數組的第101個元素......這也不好。

編輯。我只是測試了這一點,它爲我工作。我唯一改變是< =在外環到n <

void insertionSort(int list[], int last){ 
int hold; 
int walker; 
int current; 
int count; 

count = 0; 
for (current = 1; current < last; current++){ 
    hold = list[current]; 
    for (walker = current - 1; 
     walker >= 0 && hold < list[walker]; walker--){ 
       list[walker + 1] = list[walker]; 
     } 
    list [walker + 1] = hold; 
    count++; 
} 
printf("\n\nHow many passes to sort?\n%d\n\n", count); 
return; 
} 
+0

仍然沒有它後,我改變它 – shinjuo

+0

你是否經歷了其他類型的?例如,walker = current - 1;當電流爲0時將爲-1,並且內部循環將永遠不會被訪問。 –

+0

無論我怎麼改變它說變量'數字'周圍堆棧損壞 – shinjuo

2

如果聲明等

int numbers[100] 

數字[99]陣列是最後一個元素。在您的排序功能中,您還可以訪問號碼[100]

+0

它仍然是它是 – shinjuo

+0

後,它給了我運行堆棧錯誤各地變量數2堆被損壞 – shinjuo