Advertisement
Guest User

Untitled

a guest
May 24th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. qs = function(S)
  2. {
  3. if (length(S) <= 1)
  4. return (S)
  5.  
  6. left = 1
  7. right = length(S)
  8.  
  9. randomIndex = sample(1:length(S), 1) # alegem indexul pivotului intre 1 si lungimea lui S
  10. pivot = S[randomIndex]; # salvam valoarea pivotului ales cu indexul aleator
  11.  
  12. while (left < right) {
  13. # cautam o valoare mai mare ca pivotul (in stanga acestuia)
  14. while (S[left] < pivot)
  15. left = left + 1
  16.  
  17. # cautam o valoare mai mica (virgula) ca pivotul (in dreapta acestuia)
  18. while (S[right] > pivot)
  19. right = right - 1
  20.  
  21. if (left <= right) {
  22. # interschimbam cand gasim:
  23. # o valoare din stanga pivotului care este mai mare ca pivotul
  24. # o valoare din dreapta pivotului care este mai mica (virgula) ca pivotul
  25. temp = S[left]
  26. S[left] = S[right]
  27. S[right] = temp
  28.  
  29. # dupa interschimbare trecem mai departe
  30. left = left + 1
  31. right = right - 1
  32. }
  33. }
  34.  
  35. # sortam in stanga si in dreapta recursiv, concatenand
  36. # elementele mai mici ca pivotul, pivotul, si elementele mai mari ca pivotul
  37. return (c(qs(S[S < pivot]), pivot, qs(S[S > pivot])))
  38. }
  39.  
  40. S = c(28, -21, 3, -5, -4, 0, 9, 105, 503, -62, 1001, 1042)
  41. qs(S)
  42.  
  43. ##LasVegasPOWER
  44. #Rezultat mereu corect , pacat ca timpul de executie variaza...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement