forked from nxexox/aist
-
Notifications
You must be signed in to change notification settings - Fork 0
/
comb_sort.py
30 lines (20 loc) · 1.02 KB
/
comb_sort.py
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
#!/usr/bin/python
# coding: utf8
def comb_sort(_list):
"""
Сортировка расческой. Сортируем по два элемента на расстонии d.
:param _list: Массив для сортировки
:type _list: list
:return: Отсортированный массив
:rtype: list
"""
length = len(_list) # Расстояние между элементами.
while length > 1:
length = max(1, int(length / 1.25)) # Расстояние должно быть минимум 1.
for i in range(len(_list) - length): # Идем не по всей длине, что бы не выскочить за массив.
if _list[i] > _list[i + length]: # Смотрим надо ли поменять местами.
_list[i], _list[i + length] = _list[i + length], _list[i]
return _list
if __name__ == "__main__":
test_list = [12, 68, 213, 1, 59, 394, 43, 12, 645, 324, 98, 999, 998]
print(comb_sort(test_list))