int[] array = { 4, 7, 1, 5, 2, 6 };
for (int i = 0; i < array.length; i++)
{
for (int j = i; j > 0 && array[j - 1] > array[j]; j--)
{
array[j] = array[j - 1] + array[j];
array[j - 1] = array[j] - array[j - 1];
array[j] = array[j] - array[j - 1];
}
}
Tri par insertion, l'échange ci-dessus n'utilise pas de variables intermédiaires, mais il y a aussi un problème, il peut y avoir un débordement, car a=a b peut provoquer un débordement. Une autre façon sans variables intermédiaires est d'utiliser XOR : a=a. ^b,b=a^b,a=a^b Cette méthode ne convient pas aux nombres à virgule flottante. En bref, elle est simplement utilisée pour échanger des données sans espace supplémentaire. . . L’accent est toujours mis sur l’algorithme lui-même. .
Les boucles imbriquées sont écrites en tri par insertion, mais le corps de la boucle interne est différent du tri par insertion.
Tri par insertion, le deuxième niveau de boucle est si array[j-1]>array[j], échangez les valeurs de array[j] et array[j-1]
Tri par insertion
Ce code signifie échange, aucune variable intermédiaire n'est nécessaire
Tri par insertion. L'intérieur de la boucle de deuxième niveau signifie échanger des valeurs
Tri par insertion, le code dans la boucle de deuxième niveau peut paraître un peu brouillon, mais s'il est simplifié, il équivaut à :
a = a – b;
* signifie l'échange des valeurs de a et b. Si vous ne comprenez pas, vous pouvez remplacer les nombres spécifiques pour voir.