Advertisement
Fenny_Theo

Untitled

Jul 25th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. class Node:
  2. def __init__(self,element,pointer = None):
  3. self.element = element
  4. self.pointer = pointer
  5. class LinkedQueue:
  6. def __init__(self):
  7. self.head = None
  8. self.tail = None
  9. self.size = 0
  10.  
  11. def __len__(self):
  12. return self.size
  13.  
  14. def is_empty(self):
  15. return self.size == 0
  16.  
  17. def first(self):
  18. if self.is_empty():
  19. print("Queue is empty.")
  20. else:
  21. return self.head.element
  22.  
  23. def dequeue(self):
  24. if self.is_empty():
  25. print("Queue is empty.")
  26. else:
  27. answer = self.head.element
  28. self.head = self.head.pointer
  29. self.size -= 1
  30. if self.is_empty():
  31. self.tail = None
  32. return answer
  33.  
  34. def enqueue(self, e):
  35. newest = Node(e, None)
  36. if self.is_empty():
  37. self.head = newest
  38. else:
  39. self.tail.pointer = newest
  40. self.tail = newest
  41. self.size += 1
  42.  
  43. def delete(self, i, j): # delete j
  44. if j == self.tail:
  45. self.tail = i
  46. i.pointer = j.pointer
  47. j.pointer = None
  48. self.size -= 1
  49. return j.element
  50.  
  51. def add_first(self, e):
  52. newest = Node(e, None)
  53. newest.pointer = self.head
  54. self.head = newest
  55. self.size = self.size + 1
  56.  
  57. if self.size == 1:
  58. self.tail = newest
  59.  
  60. def contact(self, q):
  61. self.tail.pointer = q.head
  62. self.tail = q.tail
  63. self.size += q.size
  64.  
  65.  
  66. def quickSort(reference):
  67. q = LinkedQueue()
  68. temp = reference
  69. while temp != None:
  70. q.enqueue(temp.element)
  71. temp = temp.pointer# to the last
  72. if q.size == 1:
  73. return q.head
  74. if q.size == 0:
  75. return None
  76. past = reference
  77. now = reference.pointer
  78. pivot = reference.element
  79.  
  80. left = LinkedQueue()
  81.  
  82. while now != None:
  83. if now.element <= pivot:
  84. t = q.delete(past,now)
  85. left.enqueue(t)
  86. now = past.pointer
  87. else:
  88. past = now
  89. now = past.pointer
  90.  
  91. h = q.dequeue()
  92. left.head = quickSort(left.head)
  93. q.head = quickSort(q.head)
  94. q.add_first(h)
  95.  
  96. if left.size == 0:
  97. return q.head
  98. else:
  99. left.contact(q)
  100. return left.head
  101.  
  102. #use to check
  103. q = LinkedQueue()
  104. q.enqueue(1)
  105. q.enqueue(7)
  106. q.enqueue(3)
  107. q.enqueue(4)
  108. q.enqueue(6)
  109.  
  110.  
  111. print(quickSort(q.head).element)
  112.  
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement