Skip to content

Commit d2d8d54

Browse files
authored
Add files via upload
1 parent 76e49c0 commit d2d8d54

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

playground.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
def bubble_sort(a):
2+
for i in range(len(a)-1):
3+
for j in range(len(a)-1-i):
4+
if a[j] > a[j+1]:
5+
a[j], a[j+1] = a[j+1], a[j]
6+
print(f"冒泡交换 {a[j]}{a[j+1]},当前序列:{a}")
7+
return a
8+
9+
def insertion_sort(a):
10+
for i in range(1,len(a)):
11+
while i>0 and a[i]<a[i-1]:
12+
a[i], a[i-1] = a[i-1], a[i]
13+
print(f"插入移动 {a[i]}→位置{i},当前序列:{a}")
14+
i -= 1
15+
return a
16+
17+
def selection_sort(a):
18+
for i in range(len(a)):
19+
min_idx = i
20+
for j in range(i+1, len(a)):
21+
if a[j] < a[min_idx]:
22+
min_idx = j
23+
a[i], a[min_idx] = a[min_idx], a[i]
24+
print(f"选择交换 {a[i]}{a[min_idx]},当前序列:{a}")
25+
return a
26+
27+
def quick_sort(a):
28+
if len(a) <= 1:
29+
return a
30+
pivot = a[len(a)//2]
31+
left = [x for x in a if x < pivot]
32+
middle = [x for x in a if x == pivot]
33+
right = [x for x in a if x > pivot]
34+
return quick_sort(left) + middle + quick_sort(right)
35+
36+
def merge_sort(a):
37+
if len(a) <= 1:
38+
return a
39+
mid = len(a)//2
40+
left = merge_sort(a[:mid])
41+
right = merge_sort(a[mid:])
42+
return merge(left, right)
43+
44+
def merge(left, right):
45+
result = []
46+
i = j = 0
47+
while i < len(left) and j < len(right):
48+
if left[i] < right[j]:
49+
result.append(left[i])
50+
i += 1
51+
else:
52+
result.append(right[j])
53+
j += 1
54+
result.extend(left[i:])
55+
result.extend(right[j:])
56+
return result
57+
58+
def shell_sort(a):
59+
n = len(a)
60+
gap = n // 2
61+
while gap > 0:
62+
for i in range(gap, n):
63+
temp = a[i]
64+
j = i
65+
while j >= gap and a[j - gap] > temp:
66+
a[j] = a[j - gap]
67+
j -= gap
68+
a[j] = temp
69+
gap //= 2
70+
return a
71+
72+
def heap_sort(a):
73+
def heapify(a, n, i):
74+
largest = i
75+
l = 2 * i + 1
76+
r = 2 * i + 2
77+
if l < n and a[i] < a[l]:
78+
largest = l
79+
if r < n and a[largest] < a[r]:
80+
largest = r
81+
if largest != i:
82+
a[i], a[largest] = a[largest], a[i]
83+
heapify(a, n, largest)
84+
85+
n = len(a)
86+
for i in range(n//2 - 1, -1, -1):
87+
heapify(a, n, i)
88+
for i in range(n-1, 0, -1):
89+
a[i], a[0] = a[0], a[i]
90+
heapify(a, i, 0)
91+
return a
92+
93+
if __name__ == "__main__":
94+
test = [64,34,25,12,22,11,90]
95+
print(f"冒泡排序结果: {bubble_sort(test.copy())}")
96+
print(f"插入排序结果: {insertion_sort(test.copy())}")
97+
print(f"选择排序结果: {selection_sort(test.copy())}")
98+
print(f"快速排序结果: {quick_sort(test.copy())}")
99+
print(f"归并排序结果: {merge_sort(test.copy())}")
100+
print(f"希尔排序结果: {shell_sort(test.copy())}")
101+
print(f"堆排序结果: {heap_sort(test.copy())}")
102+

0 commit comments

Comments
 (0)