排序算法
1. 冒泡排序
冒泡排序,从左到右,分别比较两个相邻数字的大小,如果后面一个数小于前面的数就进行交换。
def bubble_sort(seq):
l = len(seq)
for i in range(l-1):
for j in range(l-1-i):
if seq[j] > seq[j+1]:
seq[j],seq[j+1] = seq[j+1],seq[j]
print(seq)
输入一个list: A = [5, 6, 3, 4, 1, 0, 2]
结果:
可以看到一轮轮下来大的数字被慢慢往后移。
2. 选择排序
每次从序列中找到最小的数插入序列的迭代位置。这样排序结束就是从小到大。
def select_sort(seq):
l = len(seq)
for i in range(l-1):
min_val = i
for j in range(i+1,l):
if seq[j]<seq[min_val]:
min_val = j
if min_val!= i:
seq[min_val],seq[i] = seq[i],seq[min_val]
print(seq)
相同的list:
结果:
3. 插入排序
假设从第一个元素开始,每一个元素都是新插进来的,那么每次插进的元素和之前的比较,放入该放的地方即可。
def insert_sort(seq):
l = len(seq)
for i in range(1,l):
val = seq[i]
pos = i
while val < seq[pos-1] and pos > 0:
seq[pos] =seq[pos-1]
pos-=1
seq[pos] = val
print(seq)
结果:
4.归并排序
基本思想就是:
- 分解:将待排序的 n 个元素分成各包含 n/2 个元素的子序列
- 解决:使用归并排序递归排序两个子序列
- 合并:合并两个已经排序的子序列以产生已排序的答案
# 用递归的思想来解决:
# 首先找到中间的数字作为基准,在左右两边分别进行排序,最后将两个有序的序列进行合并:
def merge_sort(seq):
if len(