Skip to content

Commit 218ed99

Browse files
committed
update
1 parent 4e41dd6 commit 218ed99

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

algorithms/ch02sort/base/sortutil.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- encoding: utf-8 -*-
2-
"""将重复的方法抽取出来
3-
Some of description...
2+
"""
3+
将重复的方法抽取出来
44
"""
55

66

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
冒泡排序
4+
当某次冒泡操作已经没有数据交换时,说明已经达到完全有序,不用再继续执行后续的冒泡操作。
5+
6+
算法复杂度:N^2
7+
稳定排序:重复元素排序完后仍然保持原来的相对位置。
8+
"""
9+
from algorithms.ch02sort.base.template import SortTemplate
10+
11+
12+
class BubbleSort(SortTemplate):
13+
14+
def sort(self):
15+
le = len(self.seq)
16+
for i in range(le):
17+
# 提前退出排序的标志,本次循环是否有数据交换
18+
has_exchange = False
19+
for j in range(0, le - i - 1):
20+
if self.seq[j] > self.seq[j + 1]:
21+
self.seq[j], self.seq[j + 1] = self.seq[j + 1], self.seq[j]
22+
has_exchange = True # 表示有数据交换
23+
if not has_exchange:
24+
break
25+
26+
27+
if __name__ == '__main__':
28+
bubble_sort = BubbleSort([4, 2, 5, 1, 6, 3])
29+
bubble_sort.main()

algorithms/ch02sort/m01_select_sort.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
2. 在剩下的元素中找到最小元素,将其与数组第二个元素交换位置。
66
3. 如此反复,直到剩下元素为1个,整个数组排序完。
77
8+
不稳定排序,使用场景少。
89
复杂度:O(N^2),大约需要N^2/2次比较和N次交换。
910
"""
1011
from algorithms.ch02sort.base.template import SortTemplate

algorithms/ch02sort/m02_insert_sort.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
#!/usr/bin/env python
22
"""插入排序
3-
索引从1开始往右边遍历,将元素插入到左边已排序好的数组中,索引左边的所有元素都是有序的,
4-
但是它们的最终位置并不确定,为了给更小元素腾出空间,它们可能会被移动。当索引到达最右端的时候,数组排序完成。
3+
我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。
4+
插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。
5+
重复这个过程,直到未排序区间中元素为空,算法结束。
56
67
由于其内层循环非常紧凑,对于小规模的输入,插入排序是一种非常快的原址排序算法。
7-
注: 如果输入数组中仅有常数个元素需要在排序过程中存储在数组外,则称这种排序算法是原址的。
8+
注:如果输入数组中仅有常数个元素需要在排序过程中存储在数组外,则称这种排序算法是原址的。
9+
10+
冒泡排序的数据交换要比插入排序的数据移动要复杂,冒泡排序需要3个赋值操作,而插入排序只需要1个。
11+
所以,虽然冒泡排序和插入排序在时间复杂度上是一样的,都是 O(n2),但是如果我们希望把性能优化做到极致,
12+
那肯定首选插入排序。
813
914
算法复杂度:N^2
1015
稳定排序:重复元素排序完后仍然保持原来的相对位置。

0 commit comments

Comments
 (0)