Algorithme de tri Bubble en MIPS
Je suis en train d'écrire une procédure dans l'assemblée qui trie un tableau à l'aide de bulles algorithme de tri, mais je vais avoir un problème qui est:
Dans line 22
, lors de la première itération exécuté rien n'est mauvais, programme charge array[i+1]
parfaitement dans greffier $a1
et si le swap condition est valide, le programme de swaps sans aucun problème. Cependant, dans la deuxième itération, le programme charge toujours 0
en $a1
quelle que soit la valeur réelle de l'élément a été! J'ai essayé de débogage, mais rien n'a été claire et je ne sais pas quelle est la cause de cette.
1. # Procedure: bubbleSort
2. # Objective: sort an array of integer elements in nondecreasing order
3. # Input: an address of an array of integers
4. # Output: an array sorted in nondecreasing order
5.
6. bubbleSort:
7.
8. move $t0, $a0 # move address of the array into $t0
9. li $s0, 1 # boolean swap = false. 0 --> false, 1 --> true
10. li $t1, 0 # j = 0;
11. li $t2, 0 # i = 0;
12. li $s1, 9 # array length
13. loop:
14. beqz $s0, exit # exit if swap = false
15. li $s0, 0 # swap = false;
16. addiu $t1, $t1, 1 # j++;
17. move $t2, $0 # i = 0;
18. subu $s2, $s1, $t1 # s2 = length - j
19. forLoop:
20. bge $t2, $s2, exitForLoop # if i>=s2, exit
21. lw $a0, 0($t0) # a0 = array[i]
22. lw $a1, 4($t0) # a1 = array[i+1]
23. ble $a0, $a1, update # if array[i]<=array[i+1] skip
24. sw $a1, 0($t0) # a[i+1] = a[i]
25. sw $a0, 4($t0) # a[i] = a[i+1]
26. li $s0, 1 # swap = true;
27. update:
28. addiu $t2, $t2, 1 # i++
29. sll $t3, $t2, 2 # t3 = i*4
30. addu $t0, $t0, $t3 # point to next element -->
31. j forLoop
32. exitForLoop:
33. j loop
34. exit:
35. jr $ra
Vous devez vous connecter pour publier un commentaire.
ligne 30: vous Vous déplacez à l'étape par étape dans votre tableau et modifier votre pointeur sur le tableau.
Après la première et de tous les forloops vous devez recharger l'adresse de votre tableau avant l'exécution de forloop nouveau sinon qu'il est pointé à la mauvaise place.
Voici un morceau de code pour le tri à Bulles en MIPS. Alimentation en 10 non triés nombre et cette impression sera de retour le tableau trié. Espérons que cela aide 🙂
Je viens de terminer une mission avec le même objectif; faire une bulle de tri sur la saisie de l'utilisateur avec l'hypothèse que l'entrée de l'utilisateur est une chaîne de dix caractères sont des lettres. J'ai commenté la merde hors de lui, donc n'hésitez pas à utiliser comme référence. La cession n'a pas été notée encore, j'espère juste qu'ils ne pense pas que j'ai triché parce qu'ils ont trouvé ceci sur le web.