Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.26 KB | None | 0 0
  1. def quicksort1(data, idx_start=None, idx_end=None): # rekurziv implementacio
  2.     if idx_start is None:
  3.         idx_start = 0
  4.     if idx_end is None:
  5.         idx_end = len(data) - 1
  6.     # ha a feldolgozando resz nem tartalmaz legalabb ket elemet, akkor keszen vagyunk
  7.     if idx_end <= idx_start:
  8.         return
  9.     # elemcserekkel particionaljuk a tombot
  10.     mid = data[int((idx_start+idx_end)/2)]
  11.     i = idx_start - 1
  12.     j = idx_end + 1
  13.     while True:
  14.         while True:
  15.             i += 1
  16.             if data[i] >= mid:
  17.                 break
  18.         while True:
  19.             j -= 1
  20.             if data[j] <= mid:
  21.                 break
  22.         if i >= j:
  23.             break
  24.         data[i], data[j] = data[j], data[i]
  25.         print(data)
  26.     # rekurzivan rendezzuk az elso reszt
  27.     quicksort1(data, idx_start, j)
  28.     # rekurzivan rendezzuk a masodik reszt
  29.     quicksort1(data, j+1, idx_end)
  30.  
  31.  
  32. def quicksort2(data): # iterativ implementacio
  33.     # egy veremben tartjuk nyilvan, hogy eppen melyik reszt dolgozzuk fel
  34.     stack = []
  35.     stack.append(0)
  36.     stack.append(len(data)-1)
  37.     # addig dolgozunk, amig van feldolgozando resz (nem ures a verem)
  38.     while len(stack) > 0:
  39.         idx_end = stack.pop()
  40.         idx_start = stack.pop()
  41.         # ha a feldolgozando resz nem tartalmaz legalabb ket elemet, akkor keszen vagyunk
  42.         if idx_end <= idx_start:
  43.             continue
  44.         # elemcserekkel particionaljuk a tombot
  45.         mid = data[int((idx_start+idx_end)/2)]
  46.         i = idx_start - 1
  47.         j = idx_end + 1
  48.         while True:
  49.             while True:
  50.                 i += 1
  51.                 if data[i] >= mid:
  52.                     break
  53.             while True:
  54.                 j -= 1
  55.                 if data[j] <= mid:
  56.                     break
  57.             if i >= j:
  58.                 break
  59.             data[i], data[j] = data[j], data[i]
  60.             print(data)
  61.         # eloirjuk a masodik resz rendezeset
  62.         stack.append(j+1)
  63.         stack.append(idx_end)
  64.         # eloirjuk az elso resz rendezeset
  65.         stack.append(idx_start)
  66.         stack.append(j)
  67.  
  68.  
  69. print('Rekurziv modszer:')
  70. data = [6, 2, 8, 7, 4, 3, 5, 1]
  71. quicksort1(data)
  72.  
  73. print('Iterativ modszer:')
  74. data = [6, 2, 8, 7, 4, 3, 5, 1]
  75. quicksort2(data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement