2011-11-08 2 views
0

Je fais un tri d'insertion c et ça marche bien, sauf qu'après le tri le premier nombre est toujours un nombre négatif bizarre et le programme commet une erreur.Erreur avec le type d'insertion 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; 
} 

Répondre

3

Vous allez sur la taille du tableau dans la boucle. Quand current = last, list [last] est list [100], le 101ème élément du tableau ... c'est aussi pas bon.

Modifier. Je viens de tester cela et ça a marché pour moi. La seule chose que j'ai changé était le < = dans la boucle extérieure à 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

fait encore après que je le change – shinjuo

+0

est-ce que tu as traversé le reste de ton genre? Par exemple, marcheur = courant - 1; sera -1 lorsque le courant est 0, et votre boucle interne ne sera jamais accessible. –

+0

peu importe ce que je semble changer, il dit pile autour de la variable «numéros» est corrompu – shinjuo

2

Si vous déclarez un tableau comme

int numbers[100] 

nombres [99] est le dernier élément. Dans votre fonction de tri, vous accédez également aux numéros [100].

+0

Il le fait toujours après – shinjuo

+0

Il me donne l'erreur de la pile d'exécution 2 pile autour d'un nombre variable a été endommagé – shinjuo

Questions connexes