Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
76
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. if r == l + 1:
  21. if line[l] > line[r]:
  22. line[l], line[r] = line[r], line[l]
  23.  
  24.  
  25. def find_median(line, l, r):
  26. center = (l + r) / 2
  27. if line[l] > line[r]:
  28. line[l], line[r] = line[r], line[l]
  29. if line[l] > line[center]:
  30. line[l], line[center] = line[center], line[l]
  31. if line[center] > line[r]:
  32. line[center], line[r] = line[r], line[center]
  33. line[center], line[r-1] = line[r-1], line[center]
  34. return line[r-1]
  35.  
  36.  
  37. def insert_sort_index(line, l, r):
  38. if l < r:
  39. for idi in range(l+1, r+1):
  40. data = line[idi]
  41. for idj in range(idi+1)[::-1]:
  42. if idj >= l+1 and line[idj-1] > data:
  43. line[idj] = line[idj-1]
  44. else:
  45. break
  46. line[idj] = data
  47.  
  48. def quick_sort(line, l, r):
  49. if r - l > 1:
  50. pivot = find_median(line, l, r)
  51. i, j = l+1, r-2
  52. while True:
  53. while line[i] < pivot:
  54. i += 1
  55. while line[j] > pivot:
  56. j -= 1
  57. if i < j:
  58. line[i], line[j] = line[j], line[i]
  59. i += 1
  60. j -= 1
  61. else:
  62. break
  63. line[i], line[r-1] = line[r-1], line[i]
  64. quick_sort(line, l, i-1)
  65. quick_sort(line, i+1, r)
  66. else:
  67. insert_sort_index(line, l, r)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement