File tree Expand file tree Collapse file tree 11 files changed +231
-0
lines changed
Expand file tree Collapse file tree 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
You can’t perform that action at this time.
0 commit comments