diff --git "a/\320\243\321\200\320\276\320\272 3.\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 3.\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" deleted file mode 100644 index f987b9cc..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\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" +++ /dev/null @@ -1,13 +0,0 @@ -""" -Задание_3. В массиве случайных целых чисел поменять -местами минимальный и максимальный элементы. - -Пример: -В данном массиве чисел максимальное число 88 стоит на -0 позиции, а минимальное число -49 стоит на 6 позиции -Заменяем их -[88, 26, 41, 75, 23, 52, -49, 60, 69, -18] -В данном массиве чисел максимальное число 88 стоит на -6 позиции, а минимальное число -49 стоит на 0 позиции -[-49, 26, 41, 75, 23, 52, 88, 60, 69, -18] -""" diff --git "a/\320\243\321\200\320\276\320\272 3.\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_5.py" "b/\320\243\321\200\320\276\320\272 3.\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_5.py" deleted file mode 100644 index c6d2fdde..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\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_5.py" +++ /dev/null @@ -1,10 +0,0 @@ -""" -Задание_5. В массиве найти максимальный отрицательный элемент. -Вывести на экран его значение и позицию (индекс) в массиве. - -Подсказка: максимальный отрицательный - элемент, наиболее близкий к нулю - -Пример: -Базовый список: [-55, -69, -5, 72, -41, -58, -79, 58, 74, 1] -Максимальный отрицательный элемент в данном массиве = -5, его индекс 2 -""" diff --git "a/\320\243\321\200\320\276\320\272 3.\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_6.py" "b/\320\243\321\200\320\276\320\272 3.\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_6.py" deleted file mode 100644 index 923e89af..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\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_6.py" +++ /dev/null @@ -1,15 +0,0 @@ -""" -Задание_6. В одномерном массиве найти сумму элементов, -находящихся между минимальным и максимальным элементами. -Сами минимальный и максимальный элементы в сумму не включать. - -Подсказки: -1) берем первый минимальный и максимальный -2) не забудьте, что сначала может быть минимальный, потом максимальный -а может - наоборот. во всех этих случаях нужна корректная работа - -Пример: -Введите количество элементов в массиве: 10 -Массив: [88, 58, 50, 77, 49, 6, 42, 67, 14, 79] -Сумма элементов между минимальным (6) и максимальным (88) элементами: 234 -""" diff --git "a/\320\243\321\200\320\276\320\272 3.\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_7.py" "b/\320\243\321\200\320\276\320\272 3.\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_7.py" deleted file mode 100644 index 7e93662d..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\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_7.py" +++ /dev/null @@ -1,9 +0,0 @@ -""" -Задание_7. В одномерном массиве целых чисел определить два наименьших элемента. -Они могут быть как равны между собой (оба являться минимальными), так и различаться. - -Пример: -Исходный массив: [28, -86, 44, -37, -7, -52, -19, -3, -15, -73] -Наименьший элемент: -86, встречается в этом массиве 1 раз -Второй наименьший элемент: -73 -""" diff --git "a/\320\243\321\200\320\276\320\272 3.\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_8.py" "b/\320\243\321\200\320\276\320\272 3.\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_8.py" deleted file mode 100644 index e6e47a32..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\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_8.py" +++ /dev/null @@ -1,38 +0,0 @@ -""" -Задание_8. Матрица 5x4 заполняется вводом с клавиатуры кроме последних элементов строк. -Программа должна вычислять сумму введенных элементов каждой строки -и записывать ее в последнюю ячейку строки. -В конце следует вывести полученную матрицу. - -1-я строка: -3 -3 -3 -3 -2-я строка: -3 -3 -3 -3 -3-я строка: -3 -3 -3 -3 -4-я строка: -3 -3 -3 -3 -5-я строка: -3 -3 -3 -3 - -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -""" diff --git "a/\320\243\321\200\320\276\320\272 3.\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_9.py" "b/\320\243\321\200\320\276\320\272 3.\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_9.py" deleted file mode 100644 index 5380a1d5..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\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_9.py" +++ /dev/null @@ -1,13 +0,0 @@ -""" -Задание_9.Найти максимальный элемент среди минимальных элементов столбцов матрицы. - -Пример: - -Задайте количество строк в матрице: 3 -Задайте количество столбцов в матрице: 4 - 36 20 42 38 - 46 27 7 33 - 13 12 47 15 -[13, 12, 7, 15] минимальные значения по столбцам -Максимальное среди них = 15 -""" diff --git "a/\320\243\321\200\320\276\320\272 4. \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 4. \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" deleted file mode 100644 index 01c0b79d..00000000 --- "a/\320\243\321\200\320\276\320\272 4. \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" +++ /dev/null @@ -1,14 +0,0 @@ -""" -Написать два алгоритма нахождения i-го по счёту простого числа. -Без использования «Решета Эратосфена»; -Используя алгоритм «Решето Эратосфена» - -Подсказка: -Сравните алгоритмы по времени на разных порядковых номерах чисел: -10, 100, 1000 -Опишите результаты, сделайте выводы, где и какой алгоритм эффективнее -Подумайте и по возможности определите сложность каждого алгоритма - -ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) -БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО -""" 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/analisis.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/analisis.py" new file mode 100644 index 00000000..0221b795 --- /dev/null +++ "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/analisis.py" @@ -0,0 +1,126 @@ +import matplotlib.pyplot as plt +from random import randrange +from time import time + + +def timer(func): + def wrapper(*args, **kwargs): + start = time() + func(*args, **kwargs) + end = time() - start + return end + return wrapper + + +def get_list(stop, length, start=1): + return [randrange(start, stop) for _ in range(length)] + + +def swap(i, j): + temp = b_list[i] + b_list[i] = b_list[j] + b_list[j] = temp + + +def bubble_sort(lst_): + for j in range(len(lst_) - 1, 0, -1): + for i in range(j): + if lst_[i] < lst_[i + 1]: + swap(i, i + 1) + return lst_ + + +def merge_sort(arr): + def wrapper(arr_): + if len(arr_) > 1: + mid = len(arr_) // 2 + left = arr_[:mid] + right = arr_[mid:] + + merge_sort(left) + merge_sort(right) + + i = j = k = 0 + + # Copy data to temp arr_ays l[] and right[] + while i < len(left) and j < len(right): + if left[i] < right[j]: + arr_[k] = left[i] + i += 1 + else: + arr_[k] = right[j] + j += 1 + k += 1 + + # Checking if any element was left + while i < len(left): + arr_[k] = left[i] + i += 1 + k += 1 + + while j < len(right): + arr_[k] = right[j] + j += 1 + k += 1 + wrapper(arr) + + +def hoare_sort(arr): + if len(arr) <= 1: + return + barrier = arr[0] + left = [] + middle = [] + right = [] + for el in arr: + if el < barrier: + left.append(el) + elif el == barrier: + middle.append(el) + else: + right.append(el) + hoare_sort(left) + hoare_sort(right) + k = 0 + for el in left + middle + right: + arr[k] = el + k += 1 + + +@timer +def run_bubble_sort(lst_): + bubble_sort(lst_) + + +@timer +def run_hoare_sort(lst_): + merge_sort(lst_) + + +@timer +def run_merge_sort(lst_): + hoare_sort(lst_) + + +if __name__ == "__main__": + results = dict( + b_sort=(list(), list()), + h_sort=(list(), list()), + m_sort=(list(), list()) + ) + for x in [1, 50, 100, 250, 500, 750, 1000, 1250, 1500, 1750, 2000]: + lst = get_list(start=-100, stop=100, length=x) + m_list = lst[:] + b_list = lst[:] + h_list = lst[:] + m_sort = run_merge_sort(m_list) + b_sort = run_bubble_sort(b_list) + h_sort = run_hoare_sort(h_list) + for i in ['b_sort', 'h_sort', 'm_sort']: + results[i][1].append(eval(i)) + results[i][0].append(x) + + + print(results.get('b_sort')) + plt.plot(*results.get('b_sort'), 'r--', *results.get('h_sort'), 'b-', *results.get('m_sort'), 'g--') + plt.show() 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..5c3ef17e 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,29 @@ Подсказка: обратите внимание, сортируем не по возрастанию, как в примере, а по убыванию """ + +from random import randrange + + +def get_list(stop, length, start=1): + return [randrange(start, stop) for _ in range(length)] + + +def swap(i, j): + temp = lst[i] + lst[i] = lst[j] + lst[j] = temp + + +def bubble_sort(lst_): + for j in range(len(lst_) - 1, 0, -1): + for i in range(j): + if lst_[i] < lst_[i + 1]: + swap(i, i + 1) + return lst_ + + +if __name__ == "__main__": + lst = get_list(100, 1000, -100) + bubble_sort(lst) + print(lst) 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..e37e4530 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,49 @@ Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562] Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828] """ + +from random import randrange, random + + +def get_list(stop, length, start=1): + return [random()*50 for _ in range(length)] + + +def merge_sort(arr): + if len(arr) > 1: + mid = len(arr) // 2 + left = arr[:mid] + right = arr[mid:] + + merge_sort(left) + merge_sort(right) + + i = j = k = 0 + + # Copy data to temp arrays l[] and right[] + while i < len(left) and j < len(right): + if left[i] < right[j]: + arr[k] = left[i] + i += 1 + else: + arr[k] = right[j] + j += 1 + k += 1 + + # Checking if any element was left + while i < len(left): + arr[k] = left[i] + i += 1 + k += 1 + + while j < len(right): + arr[k] = right[j] + j += 1 + k += 1 + + +if __name__ == "__main__": + lst = get_list(start=0, stop=50, length=100) + merge_sort(lst) + print(lst) + 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..27a2dbae 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,44 @@ массива. Но если это слишком сложно, то используйте метод сортировки, который не рассматривался на уроках """ + +from random import randrange + + +def get_list(stop, length, start=1): + return [randrange(start, stop) for _ in range(length)] + + +def hoare_sort(arr): + if len(arr) <= 1: + return + barrier = arr[0] + left = [] + middle = [] + right = [] + for el in arr: + if el < barrier: + left.append(el) + elif el == barrier: + middle.append(el) + else: + right.append(el) + hoare_sort(left) + hoare_sort(right) + k = 0 + for el in left + middle + right: + arr[k] = el + k += 1 + + +def find_media(arr, med): + return arr[med] + + +if __name__ == "__main__": + median_index = 48 + array_length = 2 * median_index + 1 + lst = get_list(start=-50, stop=50, length=array_length) + hoare_sort(lst) + median = lst[median_index] + print(f"median = {median} \nsorted list = {lst}")