galg.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Бинарный поиск
  2. # Этот алгорит работает только с отсортированными массивами
  3. def binary_search(list, item):
  4. low = 0
  5. high = len(list) - 1
  6. while low <= high:
  7. mid = (low + high)//2
  8. guess = list[mid]
  9. if guess == item:
  10. return mid
  11. if guess > item:
  12. high = mid - 1
  13. else:
  14. low = mid + 1
  15. return None
  16. # print(binary_search([1,3,5,7,9,10,14,16,18], 16))
  17. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  18. # Поиск наименьшего элемента массива
  19. def find_smallest(arr):
  20. smallest = arr[0]
  21. smallest_index = 0
  22. for i in range(1, len(arr)):
  23. if arr[i] < smallest:
  24. smallest = arr[i]
  25. smallest_index = i
  26. return smallest_index
  27. # Сортировка выбором
  28. def selection_sort(arr):
  29. new_arr = []
  30. for i in range(len(arr)):
  31. smallest = find_smallest(arr)
  32. new_arr.append(arr.pop(smallest))
  33. return new_arr
  34. # print(selection_sort([5,3,6,4,7,1,3,2]))
  35. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  36. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  37. # Быстрый поиск
  38. def quick_sort(arr):
  39. if len(arr) < 2:
  40. print(f'Return: {arr}')
  41. return arr
  42. else:
  43. pivot = arr[0]
  44. less = [i for i in arr[1:] if i <= pivot]
  45. greater = [i for i in arr[1:] if i > pivot]
  46. print(f'Pivot: {pivot}')
  47. print(f'Less: {less}')
  48. print(f'Greater: {greater}')
  49. return quick_sort(less) + [pivot] + quick_sort(greater)
  50. print(quick_sort([5,3,6,4,7,1,3,2]))
  51. def arr_test(arr):
  52. return [i for i in arr[1:]]
  53. # print(arr_test([5,3,6,4,7,1,3,2]))
  54. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  55. # Разное