Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. def quick_sort(line, l, r):
  2. if r - l > 50:
  3. pivot = find_median(line, l, r)
  4. i, j = l+1, r-2
  5. while True:
  6. while line[i] < pivot:
  7. i += 1
  8. while line[j] > pivot:
  9. j -= 1
  10. if i < j:
  11. line[i], line[j] = line[j], line[i]
  12. i += 1
  13. j -= 1
  14. else:
  15. break
  16. line[i], line[r-1] = line[r-1], line[i]
  17. quick_sort(line, l, i-1)
  18. quick_sort(line, i+1, r)
  19. else:
  20. insert_sort_index(line, l, r)
  21.  
  22.  
  23. def find_median(line, l, r):
  24. center = (l + r) / 2
  25. if line[l] > line[r]:
  26. line[l], line[r] = line[r], line[l]
  27. if line[l] > line[center]:
  28. line[l], line[center] = line[center], line[l]
  29. if line[center] > line[r]:
  30. line[center], line[r] = line[r], line[center]
  31. line[center], line[r-1] = line[r-1], line[center]
  32. return line[r-1]
  33.  
  34.  
  35. def insert_sort_index(line, l, r):
  36. if l < r:
  37. for idi in range(l+1, r+1):
  38. data = line[idi]
  39. for idj in range(idi+1)[::-1]:
  40. if idj >= l+1 and line[idj-1] > data:
  41. line[idj] = line[idj-1]
  42. else:
  43. break
  44. line[idj] = data
  45.  
  46. def quick_sort(line, l, r):
  47. if r - l > 1:
  48. pivot = find_median(line, l, r)
  49. i, j = l+1, r-2
  50. while True:
  51. while line[i] < pivot:
  52. i += 1
  53. while line[j] > pivot:
  54. j -= 1
  55. if i < j:
  56. line[i], line[j] = line[j], line[i]
  57. i += 1
  58. j -= 1
  59. else:
  60. break
  61. line[i], line[r-1] = line[r-1], line[i]
  62. quick_sort(line, l, i-1)
  63. quick_sort(line, i+1, r)
  64. else:
  65. if r == l + 1:
  66. if line[l] > line[r]:
  67. line[l], line[r] = line[r], line[l]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement