Skip to content

Commit b515025

Browse files
Add files via upload
1 parent 6106964 commit b515025

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

main.py

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
"""
2+
3+
编程拓展课实验作业
4+
5+
时间: 9/18
6+
7+
"""
8+
9+
10+
# ? 1.About the sort
11+
# 1.1 bubble_sort
12+
13+
def bubble_sort(arr):
14+
n = len(arr)
15+
for i in range(n):
16+
#? Flag whether this data has been exchanged or not.If it's True which means exchanged.
17+
swapped = False
18+
#? After each traversal,the biggest element form this time arr will go to the end.
19+
for j in range(0, n - i - 1):
20+
if arr[j] > arr[j + 1]:
21+
arr[j], arr[j + 1] = arr[j + 1], arr[j] #the exchange grammar in python
22+
swapped = True
23+
# if the arr ont exchanged,that means arr already orderly
24+
if not swapped:
25+
break
26+
return arr
27+
28+
# Example use
29+
30+
if __name__ == "__main__":
31+
print("冒泡排序:")
32+
U_list = [12,11,56,7,98,77,66]
33+
print("Original list:", U_list)
34+
sort_list = bubble_sort(U_list)
35+
print("sorted list:",sort_list)
36+
37+
# 1.2 堆排序
38+
39+
def heapify(arr, n, i):
40+
largest = i # 初始化最大值为根节点
41+
left = 2 * i + 1 # 左子节点
42+
right = 2 * i + 2 # 右子节点
43+
44+
# 如果左子节点比根节点大
45+
if left < n and arr[left] > arr[largest]:
46+
largest = left
47+
48+
# 如果右子节点比当前最大的还大
49+
if right < n and arr[right] > arr[largest]:
50+
largest = right
51+
52+
# 如果最大值不是根节点
53+
if largest != i:
54+
arr[i], arr[largest] = arr[largest], arr[i] # 交换
55+
heapify(arr, n, largest) # 递归调用
56+
57+
def heap_sort(arr):
58+
n = len(arr)
59+
60+
# 构建最大堆
61+
for i in range(n // 2 -1, -1, -1):
62+
heapify(arr, n, i)
63+
64+
# 一个个取出元素
65+
for i in range(n-1, 0, -1):
66+
arr[i], arr[0] = arr[0], arr[i] # 交换
67+
heapify(arr, i, 0)
68+
69+
return arr
70+
71+
# 示例使用
72+
if __name__ == "__main__":
73+
print("堆排序:")
74+
sample_list = [12, 11, 13, 5, 6, 7]
75+
print("原始列表:", sample_list)
76+
sorted_list = heap_sort(sample_list)
77+
print("排序后列表:", sorted_list)
78+
79+
80+
81+
# 1.3 插入排序
82+
83+
def insertion_sort(arr):
84+
for i in range(1, len(arr)):
85+
key = arr[i] # 当前待插入的元素
86+
j = i -1
87+
# 将arr[i]插入到已排序部分的正确位置
88+
while j >=0 and arr[j] > key:
89+
arr[j + 1] = arr[j] # 移动元素
90+
j -=1
91+
arr[j + 1] = key # 插入
92+
93+
return arr
94+
95+
# 示例使用
96+
if __name__ == "__main__":
97+
print("插入排序:")
98+
sample_list = [31, 41, 59, 26, 41, 58]
99+
print("原始列表:", sample_list)
100+
sorted_list = insertion_sort(sample_list)
101+
print("排序后列表:", sorted_list)
102+
103+
104+
# 1.4 选择排序
105+
106+
def selection_sort(arr):
107+
n = len(arr)
108+
for i in range(n):
109+
# 假设当前索引为最小值
110+
min_idx = i
111+
# 在剩下的元素中寻找最小值
112+
for j in range(i+1, n):
113+
if arr[j] < arr[min_idx]:
114+
min_idx = j
115+
# 交换找到的最小值与当前位置的值
116+
arr[i], arr[min_idx] = arr[min_idx], arr[i]
117+
return arr
118+
119+
# 示例使用
120+
if __name__ == "__main__":
121+
print("选择排序:")
122+
sample_list = [64, 25, 12, 22, 11]
123+
print("原始列表:", sample_list)
124+
sorted_list = selection_sort(sample_list)
125+
print("排序后列表:", sorted_list)

0 commit comments

Comments
 (0)