def mergeSort(A, l, r): if l < r: mid = (l + r) // 2 mergeSort(A, l, mid) mergeSort(A, mid + 1, r) merge(A, l, mid, r) def merge(arr, l, mid, r): arr1 = [] arr2 = [] for i in range(mid): arr1.append(arr[i]) for j in range(mid, r): arr2.append(arr[j]) i = 0 j = 0 k = 0 while (i < len(arr1) and j < len(arr2)): if arr1[i] < arr2[j]: arr[k] = arr1[i] i += 1 else: arr[k] = arr2[j] j += 1 k += 1 while i < len(arr1): arr[k] = arr1[i] i += 1 k += 1 while j < len(arr2): arr[k] = arr2[j] j += 1 k += 1 arr = [2, 9, 7, 6, 1, 8, 4, 3] mergeSort(arr, 0, 8) print(arr) There's a slight mistake somewhere in the code that I'm not able to find Please try to run this code on your machine with different test cases. And Let me know what I'm doing wrong here. I don't know why I'm getting an incorrect answer: [1, 2, 3, 4, 6, 8, 9, 7]
3 Réponses :
else: arr[k] = arr2[j] j += 1 k += 1
Non, ça ne marche pas. Ce que vous impliquant est la même chose que j'ai déjà fait
Vous avez des problèmes avec des index. Vous avez écrit du code dans le style C. Utilisez simplement des tranches pour résoudre votre problème
Modifier la définition (Supprimer des boucles pour ARR1 et ARR2) pour ARR1 et ARR2 sur: P>
arr1 = arr[:mid] arr2 = arr[mid:]
Bien sûr, cela me donne la sortie correcte. Mais, qu'est-ce qui n'allait pas avec mon code
J'ai bien peur que cela ne fonctionne que par coïncidence. L'initialisation doit être arr1 = arr [l: moyen] code> et
arr2 = arr [milieu: r] code> mais il existe d'autres problèmes dans
Mergesort () Code >.
Il y a plusieurs problèmes dans votre code:
Mergesort code> avec différentes sémantiques que vous supposez r code> être l'index du dernier élément de la tranche. LI>
- de la même manière,
fusion code> attend que l'argument moyen code> est le début de la moitié droite et que vous passez moyen code>, qui serait l'index à le dernier élément de la première moitié de votre approche. LI>
- dans la fonction
fusion code>, arr1 code> doit être initialisé avec i code> variant de l code> à MID code>, avec pour i in gamme (L: mi-temps): code> li>
- En outre,
k code> doit être initialisé à l code>, pas 0 code>. li>
- Notez que
arr1 code> et Arr2 code> pourrait être initialisé à partir de tranches simples de Arr code>. li>.
ul> Voici une version modifiée: p> xxx pré> sortie: p> xxx pré> p>
Avez-vous essayé de déboguer votre code?
Bien sûr que je l'ai fait