1.直接插入排序
算法思想:
对一组无序数据,比如[4,2,1,3,5],首先以前两个为一个单元进行排序,结果为[2,4];然后再插入一个数字,即[2,4,1],进行排序,结果为[1,2,4];然后再插入一个数字,即[1,2,4,3],进行排序,结果为[1,2,3,4];然后再插入一个数字,即[1,2,3,4,5],进行排序,结果为[1,2,3,4,5]。
代码实现:
# -*- coding:utf-8 -*-
L = [4,2, 1, 3, 5, 7, 6, 9, 8, 0]
###思路一
def direct_insert_sort(numbers):
for i in range(1,len(numbers)):
temp = numbers[i]
j = i-1
#########################################################
# 本算法的核心所在!
while j>=0 and temp<numbers[j]:
numbers[j+1]=numbers[j]
j = j-1
numbers[j+1] = temp
print(numbers)
###########################################################
if __name__=='__main__':
direct_insert_sort(L)
print (L)
###思路二
def insertSort(relist):
len_ = len(relist)
for i in range(1,len_):
for j in range(i):
if relist[i] < relist[j]:
relist.insert(j,relist[i]) # 若前一项数字大于后一项,则将其(大的一项)被小的一项所代替。
relist.pop(i+1) # 用于移除列表下标为:i+1的那一项(相当于是添加了较小的一项,删除了最后的较小的一项)。
break
return relist
print(insertSort(L))
2.希尔排序
算法思想:
代码实现:
# -*- coding:utf-8 -*-
###直接插入排序算法
def ShellInsetSort(relist):
len_ = len(relist)
for i in range(1,len_):
for j in range(i):
if relist[i] < relist[j]:
relist.insert(j,relist[i]) # 若前一项数字大于后一项,则将其(大的一项)被小的一项所代替。
relist.pop(i+1) # 用于移除列表下标为:i+1的那一项(相当于是添加了较小的一项,删除了最后的较小的一项)。
break
return relist
###希尔排序
def ShellSort(relist):
len_ = len(relist)
dk = int(len_/2) # 增量
while(dk >= 1):
ShellInsetSort(relist) #调用直接插入排序算法
dk = int(dk/2)
return relist
if __name__ == "__main__":
A = [4,2, 1, 3, 5, 7, 6, 9, 8, 0]
print(ShellSort(A))
3.选择排序
算法思想:一次每从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
代码实现:
def selection_sort(list2):
for i in range(0, len(list2)-1):
min_ = i
for j in range(i + 1, len(list2)):
if list2[j] < list2[min_]:
min_ = j
list2[i], list2[min_] = list2[min_], list2[i]
return list2
A=[4,2, 1, 3, 5, 7, 6, 9, 8, 0]
print(selection_sort(A))
参考资料:https://www.bilibili.com/video/av18176082 ? from = search & seid = 4719489019078203246
4.冒泡排序
算法思想:
①比较相邻的元素。如果第一个比第二个大,就交换他们两个。
②对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
③在步骤①②的基础上,将当前最大的数保留,下标数为0到-2的数字为新的数组。
④在新的数组下依次进行步骤①②。
⑤依次进行以上步骤,直到完成数组排序。
代码实现:
# -*- coding:utf-8 -*-
def bubble_sort(nums):
for i in range(len(nums) - 1): # 这个循环负责设置冒泡排序进行的次数
for j in range(len(nums) - i - 1): # j为列表下标
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
return nums
print(bubble_sort([4,2, 1, 3, 5, 7, 6, 9, 8, 0]))