Skip to content
This repository was archived by the owner on Apr 18, 2019. It is now read-only.

Commit 0a3c02a

Browse files
Merge pull request #7 from dmitryrubtsov/lesson-07
Lesson 07 has been checked.
2 parents 1387504 + 0240dd5 commit 0a3c02a

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,8 @@ Education
6161

6262
1. Подсчитать, сколько было выделено памяти под переменные в ранее разработанных программах в рамках первых трех уроков. Проанализировать результат и определить программы с наиболее эффективным использованием памяти.
6363
Примечание: Для анализа возьмите любые 1-3 ваших программы или несколько вариантов кода для одной и той же задачи. Результаты анализа вставьте в виде комментариев к коду. Также укажите в комментариях версию Python и разрядность вашей ОС.
64+
65+
## **Lesson 7**
66+
67+
1. Отсортируйте по убыванию методом "пузырька" одномерный целочисленный массив, заданный случайными числами на промежутке [-100; 100). Выведите на экран исходный и отсортированный массивы. Сортировка должна быть реализована в виде функции. По возможности доработайте алгоритм (сделайте его умнее).
68+
2. Отсортируйте по возрастанию методом слияния одномерный вещественный массив, заданный случайными числами на промежутке [0; 50). Выведите на экран исходный и отсортированный массивы.

lesson-07/lesson-07_1.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
'''1. Отсортируйте по убыванию методом "пузырька" одномерный целочисленный
2+
массив, заданный случайными числами на промежутке [-100; 100). Выведите на
3+
экран исходный и отсортированный массивы. Сортировка должна быть реализована в
4+
виде функции. По возможности доработайте алгоритм (сделайте его умнее).'''
5+
6+
from random import randint
7+
from timeit import timeit
8+
9+
MAX_SIZE = 100
10+
NUMBER_EXECUTIONS = 10_000
11+
12+
13+
def bubble_sort(array):
14+
for i in range(len(array) - 1, 0, -1):
15+
flag = True
16+
for n in range(i):
17+
if array[n] > array[n+1]:
18+
array[n], array[n+1] = array[n+1], array[n]
19+
flag = False
20+
21+
if flag == True:
22+
break
23+
return array
24+
25+
26+
def bubble_sort_no_smart(array):
27+
for i in range(len(array) - 1, 0, -1):
28+
for n in range(i):
29+
if array[n] > array[n+1]:
30+
array[n], array[n+1] = array[n+1], array[n]
31+
32+
return array
33+
34+
35+
numbers = [randint(-100, 100) for _ in range(MAX_SIZE)]
36+
print(numbers)
37+
print(bubble_sort(numbers))
38+
39+
time1 = timeit(f'bubble_sort({numbers})',
40+
setup='from __main__ import bubble_sort',
41+
number=NUMBER_EXECUTIONS)
42+
time2 = timeit(f'bubble_sort_no_smart({numbers})',
43+
setup='from __main__ import bubble_sort_no_smart',
44+
number=NUMBER_EXECUTIONS)
45+
print(time1)
46+
print(time2)

lesson-07/lesson-07_2.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
'''2. Отсортируйте по возрастанию методом слияния одномерный вещественный
2+
массив, заданный случайными числами на промежутке [0; 50). Выведите на экран
3+
исходный и отсортированный массивы.'''
4+
5+
from random import randint
6+
7+
MAX_SIZE = 50
8+
9+
def merge_sort(array):
10+
11+
if len(array) < 2:
12+
return array
13+
14+
mid = len(array) // 2
15+
16+
left_part = array[:mid]
17+
right_part = array[mid:]
18+
19+
left_part = merge_sort(left_part)
20+
right_part = merge_sort(right_part)
21+
22+
return merge_list(left_part, right_part)
23+
24+
25+
def merge_list(list_1, list_2):
26+
result = []
27+
i = 0
28+
j = 0
29+
while i < len(list_1) and j < len(list_2):
30+
if list_1[i] <= list_2[j]:
31+
result.append(list_1[i])
32+
i += 1
33+
else:
34+
result.append(list_2[j])
35+
j += 1
36+
37+
result += list_1[i:]
38+
result += list_2[j:]
39+
return result
40+
41+
42+
numbers = [randint(0, 50) for _ in range(MAX_SIZE)]
43+
44+
print(numbers)
45+
print(merge_sort(numbers))

0 commit comments

Comments
 (0)