Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 26c3b67

Browse files
committed
修改命名与结构,让代码更加 Pythonic
1 parent 02064d7 commit 26c3b67

File tree

11 files changed

+231
-0
lines changed

11 files changed

+231
-0
lines changed

‎Search/__init__.py‎

Whitespace-only changes.

‎Search/linear_search.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def linear_search(arr, key):
2+
"""顺序(线性)查找算法实现"""
3+
for index, value in enumerate(arr):
4+
# 寻找目标
5+
if value == key:
6+
return index

‎Sort/bubble_sort.py‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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

‎Sort/count_sort.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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

‎Sort/heap_sort.py‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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

‎Sort/insert_sort.py‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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

‎Sort/marge_sort.py‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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

‎Sort/quick_sort.py‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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])

‎Sort/selection_sort.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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

‎Sort/shell_sort.py‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /