1. 冒泡排序
冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
步骤:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码实现:
def maopao_sort(array):
for i in range(len(array)) :
for j in range(len(array)-1) :
if array[j]>array[j+1]:
array[j], array[j+1]= array[j+1], array[j]
return array
a=[3,15,7,2,9]
print(maopao_sort(a))
运行结果:
[2, 3, 7, 9, 15]
2.选择排序(Selection Sort)
原理:首先从未排序的数组中,找出最小(最大)的数,放在数组的第一个位置,然后再从剩余的元素中取出最小(最大)的数,放在剩余元素的第一个位置,依次类推,直到所有的元素排完。
用两种方法实现,代码如下:
def select_sort(list):
length=len(list)
for index in range(length):
for i in range(index,length):
if list[index]>list[i]:
list[index],list[i]=list[i],list[index]
return list
list=[20,7,5,8,1]
print(select_sort(list))
def select_sort(array):
for i in range(len(array)):
num = i #存索引位置
for j in range(i,len(array)-1):
if array[j]>array[j+1]:
num=j+1
[array[i],array[num]]=[array[num],array[i]]
return array
a=[20,7,5,8,1,100]
print(select_sort(a))
3. 插入排序(Insertion Sort)
原理:假设第一个元素是已排序好的,取下一个元素,跟前面已经排序好的进行比较,若大于已排序好的,则交换,依次类推,直到所有元素排好。
def insertion_sort(array):
for i in range(len(array)-1):
for j in range(i+1,0,-1): #降序
if array[j]<array[j-1]:
array[j-1],array[j]=array[j],array[j-1] #交换
return array
"""调用函数检验"""
a=[20,7,5,8,1,100]
print(insertion_sort(a))
4. 希尔排序(Shell Sort)
原理:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序
基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2(d2小于d1),重复上述的分组和排序;依次取d3、d4、…..直至取到dt=1为止,即所有记录放在同一组中进行直接插入排序。
代码实现:
def shell_sort(array):
step = int(len(array)/2)
while step > 0:
for i in range(step,len(array)):
while(i >= step and array[i] < array[i-step]):
array[i],array[i-step] = array[i-step],array[i]
i -= step
step=int(step/2)
return array
a=[5,2,7,1,3]
print(shell_sort(a))
5.归并排序
后续会更新。。