From 34417f28115ed05547800a3a1e97b71ec443bbce Mon Sep 17 00:00:00 2001 From: TonyBrother32 <79260951+TonyBrother32@users.noreply.github.com> Date: Fri, 26 Nov 2021 19:32:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=207=20=D1=83=D1=80=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task_7_1.py | 24 ++++++++++++++++++++++++ task_7_2.py | 34 ++++++++++++++++++++++++++++++++++ task_7_3.py | 27 +++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 task_7_1.py create mode 100644 task_7_2.py create mode 100644 task_7_3.py diff --git a/task_7_1.py b/task_7_1.py new file mode 100644 index 0000000..fd960c7 --- /dev/null +++ b/task_7_1.py @@ -0,0 +1,24 @@ +import random + + +def bubble_sort(arr): + n = 1 + while n < len(arr): + count = 0 + for i in range(len(arr) - 1 - (n - 1)): + if arr[i] < arr[i + 1]: + arr[i], arr[i + 1] = arr[i + 1], arr[i] + count += 1 + if count == 0: + break + n += 1 + + +SIZE = 10 +MIN_ITEM = -100 +MAX_ITEM = 99 +array = [random.randint(MIN_ITEM, MAX_ITEM) for _ in range(SIZE)] + +print(f'Массив до сортировки: {array}') +bubble_sort(array) +print(f'Массив после сортировки: {array}') diff --git a/task_7_2.py b/task_7_2.py new file mode 100644 index 0000000..5cf073c --- /dev/null +++ b/task_7_2.py @@ -0,0 +1,34 @@ +import random + + +def merge_sort(arr): + def merge(fst, snd): + res = [] + i, j = 0, 0 + while i < len(fst) and j < len(snd): + if fst[i] < snd[j]: + res.append(fst[i]) + i += 1 + else: + res.append(snd[j]) + j += 1 + res.extend(fst[i:] if i < len(fst) else snd[j:]) + return res + + def div_half(lst): + if len(lst) == 1: + return lst + elif len(lst) == 2: + return lst if lst[0] <= lst[1] else lst[::-1] + else: + return merge(div_half(lst[:len(lst)//2]), div_half(lst[len(lst)//2:])) + return div_half(arr) + + +SIZE = 10 +MIN_ITEM = 0 +MAX_ITEM = 50 +array = [random.uniform(MIN_ITEM, MAX_ITEM) for _ in range(SIZE)] + +print(f'Массив до сортировки: {array}') +print(f'Массив после сортировки: {merge_sort(array)}') diff --git a/task_7_3.py b/task_7_3.py new file mode 100644 index 0000000..1b2fb8c --- /dev/null +++ b/task_7_3.py @@ -0,0 +1,27 @@ +import random + + +def median(array, k): + if len(array) == 1: + return array[0] + + spam = random.choice(array) + left_el = [el for el in array if el < spam] + right_el = [el for el in array if el > spam] + spam = [el for el in array if el == spam] + + if k < len(left_el): + return median(left_el, k) + elif k < len(left_el) + len(spam): + return spam[0] + else: + return median(right_el, k - len(left_el) - len(spam)) + + +M = 7 +lst = [random.randint(0, 50) for _ in range(2 * M + 1)] +print(f'Исходный массив:\n{lst}') +print(f'Медианой является:\n{median(lst, len(lst) / 2)}') +lst.sort() +print(f'Массив после сортировки:\n{lst}') +print(f'Медианой является:\n{lst[len(lst) // 2]}') \ No newline at end of file