diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index 07560cfa..3aaf5259 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -9,3 +9,57 @@ Подсказка: обратите внимание, сортируем не по возрастанию, как в примере, а по убыванию """ + +from random import randint +from timeit import timeit + + +def bubble_sort(orig_list): + n = 1 + while n < len(orig_list): + for i in range(len(orig_list)-n): + if orig_list[i] < orig_list[i+1]: + orig_list[i], orig_list[i+1] = orig_list[i+1], orig_list[i] + n += 1 + return orig_list + + +def bubble_sort_changed(orig_list): + n = 1 + while n < len(orig_list): + a = True + for i in range(len(orig_list)-n): + if orig_list[i] < orig_list[i+1]: + orig_list[i], orig_list[i+1] = orig_list[i+1], orig_list[i] + a = False + if a: + break + n += 1 + return orig_list + + +test_list = [randint(-100, 100) for _ in range(20)] +print(test_list) +l = test_list +m = test_list +print(bubble_sort(l)) +print(bubble_sort_changed(m)) + + +i = [randint(-100, 100) for _ in range(1000)] +j = [randint(-100, 100) for _ in range(1000)] +b = timeit("bubble_sort(i)", setup="from __main__ import bubble_sort, i", number=1) +c = timeit("bubble_sort_changed(j)", setup="from __main__ import bubble_sort_changed, j", number=1) +print(f'При ста элементах \n {b} - оригинальный пузырь \n {c} - измененный') + +""" +При ста элементах + 0.0010061999999999988 - оригинальный пузырь + 0.0008992999999999987 - измененный + +Даёт незначительный прирост по времени (и то не всегда), доработка не обязательна. +""" + + + + diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index 73d3dfb6..07942843 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -8,3 +8,47 @@ Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562] Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828] """ +from random import random + + +def merge_sort(orig_list): + if len(orig_list) > 1: + center = len(orig_list) // 2 # Делим массив на два подмассива + left = orig_list[:center] # Левая часть от первого элеметна до центра + right = orig_list[center:] # Правая от центра до последнего + # print('левая ', left) # С помощью принтов нагядно видно как происходит деление + # print('правая ', right) + merge_sort(left) # Через рекурсию повторяем деление каждой половинки на другие половинки + merge_sort(right) + + i, j, k = 0, 0, 0 + # print(orig_list) + while i < len(left) and j < len(right): # Далее поочередно заполняем половины списков элеиентами в + if left[i] < right[j]: # порядке возрастания. Последним этам идёт присвоение элементам ориги + orig_list[k] = left[i] # нального списка значений отсортированных склееных половинок + i += 1 + # print('основной 1 ',orig_list) + else: + orig_list[k] = right[j] + j += 1 + # print('основной 2',orig_list) + k += 1 + + while i < len(left): + orig_list[k] = left[i] + i += 1 + k += 1 + # print('основной 3 ',orig_list) + + while j < len(right): + orig_list[k] = right[j] + j += 1 + k += 1 + # print('основной 4',orig_list) + return orig_list + + +a = [random()*50 for el in range(int(input("Введите число элементов: ")))] +print(f'Исходный список - {a}') +# print(merge_sort([9, 6, 41, 29, 40])) на этом примере разбирался +print(f'Отсортированный список - {merge_sort(a)}') diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" index 33530404..6d58322c 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" @@ -6,3 +6,27 @@ массива. Но если это слишком сложно, то используйте метод сортировки, который не рассматривался на уроках """ +from random import randint +import statistics +m = int(input('Введите натуральное число')) +a = [randint(0, 100) for el in range(2*m+1)] +print(a) +dif = {} +for i in a: + g = 0 + t = 0 + for j in a: + if i < j: + g += 1 + elif i > j: + t += 1 + dif[abs(g-t)] = i +print('Медиана по словарю', (dif[min(dif)])) +print(statistics.median(a)) + + + + + + +