File tree 11 files changed +231
-0
lines changed
11 files changed +231
-0
lines changed Original file line number Diff line number Diff line change
1
+ def linear_search (arr , key ):
2
+ """顺序(线性)查找算法实现"""
3
+ for index , value in enumerate (arr ):
4
+ # 寻找目标
5
+ if value == key :
6
+ return index
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """冒泡排序 """
5
+
6
+
7
+ def bubble_sort (arr ):
8
+ length = len (arr )
9
+ for index in range (length ):
10
+ for j in range (1 , length - index ):
11
+ if arr [j - 1 ] > arr [j ]:
12
+ # 交换两者数据,这里没用temp是因为python 特性元组。
13
+ arr [j - 1 ], arr [j ] = arr [j ], arr [j - 1 ]
14
+ return arr
15
+
16
+
17
+ def bubble_sort_flag (arr ):
18
+ length = len (arr )
19
+ for index in range (length ):
20
+ # 标志位
21
+ flag = True
22
+ for j in range (1 , length - index ):
23
+ if arr [j - 1 ] > arr [j ]:
24
+ arr [j - 1 ], arr [j ] = arr [j ], arr [j - 1 ]
25
+ flag = False
26
+ if flag :
27
+ # 没有发生交换,直接返回list
28
+ return arr
29
+ return arr
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def count_sort (arr ):
6
+ min_num = 2147483647
7
+ max_num = 0
8
+ # 第一步 取得最大值和最小值
9
+ for x in arr :
10
+ if x < min_num :
11
+ min_num = x
12
+ if x > max_num :
13
+ max_num = x
14
+ # 创建数组C
15
+ count = [0 ] * (max_num - min_num + 1 )
16
+ for index in arr :
17
+ count [index - min_num ] += 1
18
+ index = 0
19
+ for a in range (max_num - min_num + 1 ):
20
+ for c in range (count [a ]):
21
+ arr [index ] = a + min_num
22
+ index += 1
23
+ return arr
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def heap_sort (arr ):
6
+ # 创建最大堆
7
+ for start in range ((len (arr ) - 2 ) // 2 , - 1 , - 1 ):
8
+ sift_down (arr , start , len (arr ) - 1 )
9
+
10
+ # 堆排序
11
+ for end in range (len (arr ) - 1 , 0 , - 1 ):
12
+ arr [0 ], arr [end ] = arr [end ], arr [0 ]
13
+ sift_down (arr , 0 , end - 1 )
14
+ return arr
15
+
16
+
17
+ # 最大堆调整
18
+ def sift_down (arr , start , end ):
19
+ root = start
20
+ while True :
21
+ child = 2 * root + 1
22
+ if child > end :
23
+ break
24
+ if child + 1 <= end and arr [child ] < arr [child + 1 ]:
25
+ child += 1
26
+ if arr [root ] < arr [child ]:
27
+ arr [root ], arr [child ] = arr [child ], arr [root ]
28
+ root = child
29
+ else :
30
+ break
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def insert_sort (arr ):
6
+ n = len (arr )
7
+ for i in range (1 , n ):
8
+ # 后一个元素和前一个元素比较
9
+ # 如果比前一个小
10
+ if arr [i ] < arr [i - 1 ]:
11
+ # 将这个数取出
12
+ temp = arr [i ]
13
+ # 保存下标
14
+ index = i
15
+ # 从后往前依次比较每个元素
16
+ for j in range (i - 1 , - 1 , - 1 ):
17
+ # 和比取出元素大的元素交换
18
+ if arr [j ] > temp :
19
+ arr [j + 1 ] = arr [j ]
20
+ index = j
21
+ else :
22
+ break
23
+ # 插入元素
24
+ arr [index ] = temp
25
+ return arr
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def merge_sort (arr ):
6
+ # 认为长度不大于1的数列是有序的
7
+ if len (arr ) <= 1 :
8
+ return arr
9
+ # 二分列表
10
+ middle = len (arr ) // 2
11
+ left = merge_sort (arr [:middle ])
12
+ right = merge_sort (arr [middle :])
13
+ # 最后一次合并
14
+ return merge (left , right )
15
+
16
+
17
+ # 合并
18
+ def merge (left , right ):
19
+ l , r = 0 , 0
20
+ result = []
21
+ # 两个子数列比大小
22
+ while l < len (left ) and r < len (right ):
23
+ if left [l ] < right [r ]:
24
+ result .append (left [l ])
25
+ l += 1
26
+ else :
27
+ result .append (right [r ])
28
+ r += 1
29
+ # 填充结果
30
+ result += left [l :]
31
+ result += right [r :]
32
+ return result
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def quick_sort (arr ):
6
+ less = []
7
+ pivot_list = []
8
+ more = []
9
+ # 递归出口
10
+ if len (arr ) <= 1 :
11
+ return arr
12
+ else :
13
+ # 将第一个值做为基准
14
+ pivot = arr [0 ]
15
+ for i in arr :
16
+ # 将比急转小的值放到less数列
17
+ if i < pivot :
18
+ less .append (i )
19
+ # 将比基准打的值放到more数列
20
+ elif i > pivot :
21
+ more .append (i )
22
+ # 将和基准相同的值保存在基准数列
23
+ else :
24
+ pivot_list .append (i )
25
+ # 对less数列和more数列继续进行排序
26
+ less = quick_sort (less )
27
+ more = quick_sort (more )
28
+ return less + pivot_list + more
29
+
30
+
31
+ def qsort (arr ):
32
+ if len (arr ) <= 1 :
33
+ return arr
34
+ else :
35
+ pivot = arr [0 ]
36
+ return qsort ([x for x in arr [1 :] if x < pivot ]) + \
37
+ [pivot ] + \
38
+ qsort ([x for x in arr [1 :] if x >= pivot ])
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def selection_sort (arr ):
6
+ n = len (arr )
7
+ # 遍历所有元素
8
+ for i in range (0 , n ):
9
+ # 获取最小元素的
10
+ min_num = i
11
+ # 遍历未排序元素
12
+ for j in range (i + 1 , n ):
13
+ # 找到一个比最小元素小的元素
14
+ if arr [j ] < arr [min_num ]:
15
+ min_num = j
16
+ # 交换数据
17
+ arr [min_num ], arr [i ] = arr [i ], arr [min_num ]
18
+ return arr
Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+
5
+ def shell_sort (arr ):
6
+ n = len (arr )
7
+ # 初始步长
8
+ gap = round (n / 2 )
9
+ while gap > 0 :
10
+ for i in range (gap , n ):
11
+ # 每个步长进行插入排序
12
+ temp = arr [i ]
13
+ j = i
14
+ # 插入排序
15
+ while j >= gap and arr [j - gap ] > temp :
16
+ arr [j ] = arr [j - gap ]
17
+ j -= gap
18
+ arr [j ] = temp
19
+ # 得到新的步长
20
+ gap = round (gap / 2 )
21
+ return arr
Original file line number Diff line number Diff line change
1
+ from unittest import TestCase
2
+
3
+
4
+ class TestSort (TestCase ):
5
+
6
+ def test_bubble_sort (self ):
7
+
8
+ self .fail ()
9
+
You can’t perform that action at this time.
0 commit comments