J'essaie de trier un tableau en utilisant le tri par insertion.
Au lieu de changer et de réorganiser les éléments du tableau lui-même, j'utilise un autre tableau nommé rank to Map pour pointer sur le tableau original.
ici est mon codeTri du tableau par tri par insertion
int i,j;
int ar[] = {50,14,51,25,10};
int rank[] = {0,1,2,3,4};
for(i=1 ; i< 5 ; ++i) // second element onwards
{
int temp = rank[i]; // stores current value in temp variable
/**
* temp = 1
* j = 0
*/
j = rank[i] - 1;
while (ar[temp] < ar[ rank[j] ] && j > -1)
{
rank[j+1] = rank[j]; // move elemnts in map forward
j--;
} // end loop
// insert temp at proper place
rank[j+1] = temp;
}
for(i=0 ; i< 5 ; ++i)
printf("Rank : %d, Number : %d \n",rank[i],ar[i]);
Mais, il ne donne une sortie attendue. Quelqu'un peut-il pointer vers quelle est l'erreur dans la logique?
Vous allez devoir l'affiner plus loin que simplement "Cela ne fonctionne pas". Obtenez un cas de test simple, utilisez un débogueur et suivez l'exécution du code.Les chances sont, cela vous aidera à trouver la solution. Si ce n'est pas le cas, il va au moins le réduire à une section spécifique du code. – wolfPack88
'j = rang [i] - 1;'. Essayez-vous de décrémenter la valeur dans l'élément «i» ou d'accéder à l'élément juste avant «i»? –
J'ai utilisé le débogueur netbeans. Ce que j'ai découvert c'est que j va à -2 au lieu de s'arrêter à -1. donc j'ai ajouté une contrainte supplémentaire j> -1 dans while loop.now quand j = -1 alors condition à l'intérieur alors que loop devrait renvoyer false l'arrêtant. mais ça revient vrai et je ne sais pas pourquoi. – Shashi