Skip to content

Commit c2eb5f9

Browse files
author
Your Name
committed
sort and stack
1 parent ac1e6af commit c2eb5f9

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed
+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
"""按特定顺序对一串数据进行排序。
2+
排序算法的稳定性,让相等键值的记录维持次序,例如:
3+
(3,1)(3,7)(4,1)(5,6)维持次序
4+
(3,7)(3,1)(4,1)(5,6)次序被改变"""
5+
6+
"""Bubble Sort冒泡排序,第一次冒泡把最大的推到最上面,
7+
第二次把第二大的推到最大的后面,最多需要冒泡的次数为
8+
元素总数减1"""
9+
def bubble_sort(list):
10+
"""j为每次遍历需要比较的次数,逐次减小1"""
11+
for j in range(len(alist)-1,0,-1):
12+
for i in range(j):
13+
if alist[i] > alist[i+1]:
14+
alist[i], alist[i+1] = alist[i+1], alist[i]
15+
16+
"""Selection sort选择排序:包括如何选出列表中的
17+
最小值"""
18+
def selection_sort(alist):
19+
n = len(alist)
20+
"""需要进行次n-1选择操作,逐次找出
21+
最大,次最大,,,,"""
22+
for i in range(n-1):
23+
"""记录最小的位置"""
24+
min_index = i
25+
"""从i+1位置开始选出最小数据"""
26+
for j in range(i+1, n):
27+
if alist[j] < alist[min_index]:
28+
min_index = j
29+
"""如果选出的数据不在正确位置,进行交换"""
30+
if min_index != i:
31+
alist[i], alist[min_index] = alist[min_index], alist[i]
32+
33+
"""Insertion Sort插入排序"""
34+
def insert_sort(alist):
35+
"""从第二个位置,即下标为1的元素开始向前插入"""
36+
for i in range(1, len(alist)):
37+
for j in range(i, 0, -1):
38+
"""从第i个元素向前比较,如果小于前一个元素,交换位置"""
39+
if alist[j] < alist[j-1]:
40+
alist[j], alist[j-1] = alist[j-1], alist[j]
41+
42+
"""Quick sort快速排序"""
43+
def quick_sort(alist, start, end):
44+
if start >= end:
45+
return
46+
47+
mid = alist[start]
48+
low = start
49+
high = end
50+
51+
while low < high:
52+
while low < high and alist[high] >= mid:
53+
high -= 1
54+
alist[low] = alist[high]
55+
56+
while low < high and alist[low] < mid:
57+
low += 1
58+
alist[high] = alist[low]
59+
alist[low] = mid
60+
quick_sort(alist, start, low-1)
61+
quick_sort(alist, low+1, end)
62+
63+
"""Shell sort希尔排序,是改进版直接插入排序算法"""
64+
def shell_sort(alist):
65+
n = len(alist)
66+
gap = n / 2
67+
while gap > 0:
68+
for i in range(gap, n):
69+
j = i
70+
while j>= gap and alist[j-gap] > alist[j]:
71+
alist[j-gap], alist[j] = alist[j], alist[j-gap]
72+
j -= gap
73+
gap = gap / 2
74+
75+
"""merge_sort归并排序"""
76+
def merge_sort(alist):
77+
if len(alist) <= 1:
78+
return alist
79+
num = len(alist)/2
80+
left = merge_sort(alist[:num])
81+
right = merge_sort(alist[num:])
82+
return merge_sort(left, right)
83+
84+
def merge(left, right):
85+
l, r = 0, 0
86+
result = []
87+
while l<len(left) and r<len(right):
88+
if left[l] < right[r]:
89+
result.append(left[l])
90+
l += 1
91+
else:
92+
result.append(right[r])
93+
r += 1
94+
result += left[l:]
95+
result += right[r:]
96+
return result
97+
98+
99+
100+
101+
102+
103+
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""Last in First out"""
2+
class Stack(object):
3+
def __init__(self):
4+
self.items = []
5+
6+
def is_empty(self):
7+
return self.items == []
8+
9+
def push(self, item):
10+
self.items.append(item)
11+
12+
def pop(self):
13+
"""弹出元素"""
14+
return self.items.pop()
15+
16+
def peak(self):
17+
"""返回栈顶元素"""
18+
return self.items[len(self.items)]
19+
20+
def size(self):
21+
"""返回堆栈的大小"""
22+
return len(self.items)
23+
24+
25+

0 commit comments

Comments
 (0)