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 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

‎AlgorithmAndDataStructure/Basic/sort.py

Lines changed: 103 additions & 0 deletions
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+
Lines changed: 25 additions & 0 deletions
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)

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