Lorsque je compile, il donne une erreur de violation d'accès en lecture. D'autres posts de débordement de pile indiquent que cela est dû à une boucle infinie. J'ai aussi vu que la valeur va à un très grand nombre négatif. Ma conjecture est que c'est parce que la liste [-1], mais je ne sais pas comment le changer afin qu'il ne dépasse pas la liste [0].C++ insertion tri erreur
Code tri par insertion
void insertion_sort(int list[], int length) {
for (int i = 1; i < length; i++) {
for (int j = i; (j > 0) && (list[j] < list[j - 1]); j--) {
swap(list, list[j - 1], list[j]);
}
}
}
code de fonction Swap
void swap(int list[], int & src, int & dest){
int temp = list[src];
list[src] = list[dest];
list[dest] = temp;
}
Ne pas deviner. Utilisez le débogueur. Vous ne parvenez pas à décider ce que les paramètres de «swap» signifient. Vous auriez remarqué ceci si vous avez traversé le code dans un débogueur. –
Merci, je l'ai parcouru avec le débogueur et j'ai réalisé que j'entrais la valeur au lieu de la position. – kltwoa
Non seulement en entrant la valeur, une référence à la valeur. Cela rend inutile de passer dans la liste. Vous pouvez simplement 'temp = src; src = dest; dest = temp; 'et laissez le compilateur gérer le reste. – user4581301