-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhw07_3.py
More file actions
63 lines (53 loc) · 2.06 KB
/
hw07_3.py
File metadata and controls
63 lines (53 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# -*- coding: utf-8 -*-
# 3. Массив размером 2m + 1, где m – натуральное число, заполнен случайным образом.
# Найти в массиве медиану. Медианой называется элемент ряда, делящий его на две равные
# части: в одной находятся элементы, которые не меньше медианы, в другой – не больше ее.
#
# Задачу можно решить без сортировки исходного массива. Но если это слишком сложно,
# то используйте метод сортировки, который не рассматривался на уроках.
from random import randint
MIN = 0
MAX = 99
def find_median(array):
def gnome_sort(array):
n1 = 1
n2 = 2
while n1 < len(array):
if array[n1 - 1] < array[n1]:
n1 = n2
n2 += 1
else:
array[n1 - 1], array[n1] = array[n1], array[n1 - 1]
n1 -= 1
if n1 == 0:
n1 = n2
n2 += 1
return array
mid = len(array) // 2
sorted_array = gnome_sort(array)
median = sorted_array[mid]
return median
def find_median_wo_sort(array):
if len(array) > 1:
for i in array:
less_i = 0
more_i = 0
for n in array:
if n < i:
less_i += 1
elif n > i:
more_i += 1
else:
less_i += 1
more_i += 1
if less_i == more_i:
return i
else:
return array[0]
m = randint(0, 10)
array_len = 2 * m + 1
init_array = [randint(MIN, MAX) for _ in range(array_len)]
print(
f'm = {m}\nИсходный массив: {init_array}'
f'\nМедиана: {find_median(init_array)}, '
f'\nМедиана (без сортировки): {find_median_wo_sort(init_array)}')