sort.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. # a = [42, 23, 66, 42, 93, 47, 30]
  2. # b = 'dsf aaerwq dfasdf '
  3. # c = ('sdf', 'sdqwet', 'ghetrertg')
  4. # метод .sort возвращает None
  5. # new_list = a
  6. # new_list = new_list.sort()
  7. # print(new_list)
  8. # Принимает любую итерабельную последовательность
  9. # Не изменяет начальную коллекцию
  10. # Возвращает список
  11. # sorted(a)
  12. # sorted_string = sorted(b, reverse=True)
  13. # sorted_tuple = sorted(c)
  14. # print(sorted_string)
  15. # print(sorted_tuple)
  16. # print(sorted(a))
  17. # Сортировка будет происходить по двум признакам последовательно
  18. # def foo(x):
  19. # return x%10, x//10%10
  20. # print(sorted(a, key=foo))
  21. # my_list_1 = ['ZZZ 5', 'aaa 7', 'BBB 23', 'www 45', 'EEE 5', 'ddd 5']
  22. # print(sorted(my_list_1, key = str.lower))
  23. # print(sorted(my_list_1, key = lambda x: (int(x.split()[1]), x.split()[0].lower() )))
  24. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  25. # subject_marks = [('English', 88), ('Science', 90), ('Maths', 97), ('Physics', 93),('History', 82)]
  26. # subject_marks = [('English', 88), ('Science', 90), ('Maths', 88),
  27. # ('Physics', 93), ('History', 78), ('French', 78),
  28. # ('Art', 78), ('Chemistry', 88), ('Programming', 91)]
  29. # subject_marks = sorted(subject_marks, key = lambda x: x[1])
  30. # for key, value in subject_marks:
  31. # print(key, value)
  32. # subject_marks = sorted(subject_marks, key = lambda x: x[1], reverse=True)
  33. # for key, value in subject_marks:
  34. # print(key, value)
  35. # subject_marks = sorted(subject_marks, key = lambda x: (-x[1], x[0]))
  36. # for key, value in subject_marks:
  37. # print(key, value)
  38. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. # models = [{'make': 'Nokia', 'model': 216, 'color': 'Black'},
  40. # {'make': 'Mi Max', 'model': 2, 'color': 'Gold'},
  41. # {'make': 'Samsung', 'model': 7, 'color': 'Blue'},
  42. # {'make': 'Apple', 'model': 10, 'color': 'Silver'},
  43. # {'make': 'Oppo', 'model': 9, 'color': 'Red'},
  44. # {'make': 'Huawei', 'model': 4, 'color': 'Grey'},
  45. # {'make': 'Honor', 'model': 3, 'color': 'Black'}]
  46. # models = sorted(models, key=lambda x: x.get('color'))
  47. # for i in models:
  48. # print("Производитель: ", i.get('make'), ", модель: ", i.get('model'), ", цвет: ", i.get('color'), sep='')
  49. # for i in sorted(models, key=lambda x : models.)
  50. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  51. # my_list = []
  52. # while True:
  53. # st = input()
  54. # if st == 'конец':
  55. # break
  56. # my_list.append(st.rpartition(':'))
  57. # for i in sorted(my_list, key=lambda x: -int(x[2])):
  58. # print(i[0])
  59. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  60. # n = int(input())
  61. # my_list = []
  62. # my_dict = {}
  63. # for i in range(n):
  64. # st = input()
  65. # if my_dict.get(st) == None:
  66. # my_dict.update({st: 1})
  67. # else:
  68. # my_dict.update({st: my_dict.get(st) + 1})
  69. # for key, value in my_dict.items():
  70. # my_list.append([key, value])
  71. # my_list = sorted(my_list, key=lambda x: x[1])
  72. # print(my_list[-1][0], ', ', my_list[-1][1], sep='')
  73. # print(my_list[0][0], ', ', my_list[0][1], sep='')
  74. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  75. # print(type(input().split()))
  76. # my_dict = {}
  77. # n = input()
  78. # for i in range(n):
  79. # st = input().split()
  80. def sort_1():
  81. fone_book = {}
  82. req_list = []
  83. rec_cnt = int(input())
  84. for i in range(rec_cnt):
  85. record = input().split()
  86. if record[1] not in fone_book.keys():
  87. fone_book[record[1]] = [record[0]]
  88. else:
  89. tmp = fone_book[record[1]]
  90. tmp.append(record[0])
  91. fone_book[record[1]] = tmp
  92. req_cnt = int(input())
  93. for i in range(req_cnt):
  94. req_list.append(input())
  95. for i in req_list:
  96. if i in fone_book.keys():
  97. print(*fone_book[i])
  98. else:
  99. print('Неизвестный номер')
  100. # sort_1()
  101. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  102. def sort_2():
  103. birthday_book = {}
  104. req_list = []
  105. rec_cnt = int(input())
  106. for i in range(rec_cnt):
  107. record = input().split()
  108. if record[2] not in birthday_book.keys():
  109. birthday_book[record[2]] = [[record[0], record[1]]]
  110. else:
  111. tmp = birthday_book[record[2]]
  112. tmp.append([record[0], record[1]])
  113. birthday_book[record[2]] = tmp
  114. req_cnt = int(input())
  115. for i in range(req_cnt):
  116. req_list.append(input())
  117. for i in req_list:
  118. if i in birthday_book.keys():
  119. for j in birthday_book.get(i):
  120. print(j[0], end=' ')
  121. print()
  122. else:
  123. print('Нет данных')
  124. # sort_2()
  125. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  126. def sort_3():
  127. drivers = {}
  128. new_drivers = []
  129. in_str = ""
  130. in_data = []
  131. while True:
  132. int_str = input()
  133. if int_str == "конец":
  134. break
  135. in_data = int_str.split(", ")
  136. if in_data[0] not in drivers.keys():
  137. drivers[in_data[0]] = [int(in_data[1]), 1]
  138. else:
  139. drivers[in_data[0]] = [drivers.get(in_data[0])[0] + int(in_data[1]), drivers.get(in_data[0])[1] + 1]
  140. for key, value in drivers.items():
  141. new_drivers.append((key, value[0]/value[1]))
  142. new_drivers = sorted(new_drivers, key=lambda x: (-x[1], x[0][0]))
  143. for i in new_drivers:
  144. print(i[0], i[1])
  145. # sort_3()
  146. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  147. # Сортировка пузырьком
  148. def sort_bubble():
  149. a = [1, 7, -3, 9, 0, -67, 34, 12, 45, 1000, 6, 8, -2, 99]
  150. n = len(a)
  151. flag = True
  152. for i in range(n - 1):
  153. flag = True
  154. for j in range(n - i - 1):
  155. if a[j] > a[j + 1]: # если порядок элементов пары неправильный
  156. a[j], a[j + 1] = a[j + 1], a[j] # меняем элементы пары местами
  157. flag = False
  158. if flag == True:
  159. break
  160. print('Отсортированный список:', a)
  161. # sort_bubble()
  162. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  163. # Сортировка выбором
  164. def sort_selection():
  165. a = [78, -32, 5, 39, 58, -5, -63, 57, 72, 9, 53, -1, 63, -97,
  166. -21, -94, -47, 57, -8, 60, -23, -72, -22, -79, 90, 96, -41,
  167. -71, -48, 84, 89, -96, 41, -16, 94, -60, -64, -39, 60, -14,
  168. -62, -19, -3, 32, 98, 14, 43, 3, -56, 71, -71, -67, 80, 27,
  169. 92, 92, -64, 0, -77, 2, -26, 41, 3, -31, 48, 39, 20, -30,
  170. 35, 32, -58, 2, 63, 64, 66, 62, 82, -62, 9, -52, 35, -61,
  171. 87, 78, 93, -42, 87, -72, -10, -36, 61, -16, 59, 59, 22,
  172. -24, -67, 76, -94, 59]
  173. n = len(a)
  174. new_a = []
  175. for i in range(len(a)):
  176. el = min(a)
  177. index = a.index(el)
  178. a.pop(index)
  179. new_a.append(el)
  180. print(new_a)
  181. # sort_selection()
  182. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  183. # Сортировка простыми вставками
  184. def sort_simple_insertion():
  185. a = [1, 7, -3, 9, 0, -67, 34, 12, 45, 1000, 6, 8, -2, 99]
  186. n = len(a)
  187. for i in range(1, n):
  188. elem = a[i] # берем первый элемент из неотсортированной части списка
  189. j = i
  190. # пока элемент слева существует и больше нашего текущего элемента
  191. while j >= 1 and a[j - 1] > elem:
  192. # смещаем j-й элемент отсортированной части вправо
  193. a[j] = a[j - 1]
  194. # сами идём влево, дальше ищем место для нашего текущего элемента
  195. j -= 1
  196. # нашли место для нащего текущего элемента из неотсортированной части
  197. # и вставляем его на индекс j в отсортированной части
  198. a[j] = elem
  199. for i in range(1, n):
  200. elem = a[1] # первый элемент
  201. j = i
  202. print('Отсортированный список:', a)
  203. # sort_simple_insertion()
  204. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  205. # Бинарный поиск
  206. def binary_search(list, key):
  207. low = 0
  208. high = len(list) - 1
  209. while low <= high:
  210. mid = (low + high) // 2
  211. midVal = list[mid]
  212. if midVal == key:
  213. return mid
  214. if midVal > key:
  215. high = mid - 1
  216. else:
  217. low = mid + 1
  218. return 'not found :('