From 107cc22204a660e07385a238bc3d46fe2b415cce Mon Sep 17 00:00:00 2001 From: serg0761 Date: Sun, 18 Nov 2018 13:57:24 +0500 Subject: [PATCH] lesson 7 --- 7.1.py | 30 ++++++++++++++++++++++++++++++ 7.2.py | 37 +++++++++++++++++++++++++++++++++++++ 7.3.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 7.1.py create mode 100644 7.2.py create mode 100644 7.3.py diff --git a/7.1.py b/7.1.py new file mode 100644 index 0000000..2374b62 --- /dev/null +++ b/7.1.py @@ -0,0 +1,30 @@ +#Отсортируйте по убыванию методом "пузырька" одномерный целочисленный массив, +#заданный случайными числами на промежутке [-100; 100). +# Выведите на экран исходный и отсортированный массивы. +# Сортировка должна быть реализована в виде функции. +# По возможности доработайте алгоритм (сделайте его умнее). + + +import random +import copy + +SIZE = 10 +array = [random.randrange(-100, 100) for _ in range(SIZE)] + + +def my_sort(array): + new_arr = copy.deepcopy(array) + n = 1 + k = False + while n < len(new_arr) and k is not True: + k = True + for i in range(len(new_arr) - n): + if new_arr[i] < new_arr[i+1]: + new_arr[i], new_arr[i+1] = new_arr[i+1], new_arr[i] + k = False + n += 1 + return(array, new_arr) + + +print(f'Исходный список: {my_sort(array)[0]}') +print(f'Отсортированный список: {my_sort(array)[1]}') diff --git a/7.2.py b/7.2.py new file mode 100644 index 0000000..551006c --- /dev/null +++ b/7.2.py @@ -0,0 +1,37 @@ +#Отсортируйте по возрастанию методом слияния одномерный вещественный массив, +# заданный случайными числами на промежутке [0; 50). +# Выведите на экран исходный и отсортированный массивы. + +import random +import copy + +SIZE = 12 +array = [random.random() * 50 for _ in range(SIZE)] + + +def merge_step(left, right): + new_array = [] + while left and right: + if left[0] > right[0]: + new_array.append(left.pop(0)) + else: + new_array.append(right.pop(0)) + if left: + new_array.extend(left) + if right: + new_array.extend(right) + return new_array + + +def mergesort(array): + arr = copy.deepcopy(array) + length = len(arr) + if length >= 2: + mid = int(length / 2) + arr = merge_step(mergesort(arr[:mid]), mergesort(arr[mid:])) + return arr + + +print(f'Исходный массив {array}') +print() +print(f'был отсортирован методом слияния: {mergesort(array)}') diff --git a/7.3.py b/7.3.py new file mode 100644 index 0000000..e8f040f --- /dev/null +++ b/7.3.py @@ -0,0 +1,30 @@ +#Массив размером 2m + 1, где m – натуральное число, заполнен случайным образом. +# Найдите в массиве медиану. Медианой называется элемент ряда, +# делящий его на две равные части: в одной находятся элементы, +# которые не меньше медианы, в другой – не больше медианы. +#Задачу можно решить без сортировки исходного массива. +#Но если это слишком сложно, то используйте метод сортировки, +# который не рассматривался на уроках. + +import random +import collections +import copy + + +m = 5 +SIZE = 2 * m + 1 +array = [random.randrange(1, 100) for _ in range(SIZE)] + + +def get_median(array): + median_index = (len(array) - 1) / 2 + 1 + new_array = collections.Counter(copy.deepcopy(array)) + summ_score = 0 + while summ_score < median_index: + current_med = min(new_array) + summ_score += new_array[current_med] + del new_array[current_med] + return (array, current_med) + + +print(f'В списке: {get_median(array)[0]}, медиана= {get_median(array)[1]}')