今天在重新温习排序的时候,突然想着用Python来实现一下插入排序(之前用C语言实现过了,学Python没几天),由于语法还不是很熟悉,可以说实现过程很艰难,竟然用了哟差不多两个小时。。。。
好了,那就正式写了(内含代码可以直接运行)
**首先介绍一下插入排序,作为一种最简单粗暴的排序算法,理解不难,实现也不难,但其时间复杂度比其他排序算法要大点(O(logN*N))
插入排序的工作方式:
将数组(Python中相当于list)中的元素分为两个部分:一、是前部分,是已经排好序的;二、后一部分是带排序的。每次取待排序的一个元素,插入到前面已经排好序的部分,要求不破坏前半部分的有序性。**
在完成插入排序时我想了两种方法(本质一样):
第一种:先找到元素要插入的位置,然后将从该位置(包括)到待插入元素位置之间的元素都向后移动一位,最后将元素插入该位置。代码如下:
def inertsort(l): #参数的传入,当想传入的是一个list时,直接传入一个变量就行了
N=len(l)
for x in range(1,N):
a,b=x,x
n=l[x]
while n<l[a-1] and a-1>=0:
a=a-1
if a-1<0:
a=0
while b>a:
l[b]=l[b-1]
b=b-1
l[a]=n
l=[1,3,2,8,5,3,1]
inertsort(l)
print (l)
第二种思想是:将待插入元素与其前一个元素进行比较,若小于,则将前一个元素后移一位,在将带插入元素与前前一位进行比较,若小于,则将前前一位往后移,如此操作直到遇到小于待插入元素的位置,插入到该位后一位(此位已经在上一步后移了),代码如下:
def insertsort(list):
N=len(l)
for x in range(1,N):
key=list[x]
a=x
while key<list[a-1]:
l[a]=l[a-1]
a=a-1
if a-1<0:
break
list[a]=key
l=[1,3,2,8,5,3,1]
insertsort(l)
print (l)
以上就是对于插入排序的两种实现了!
顺便吐槽一句,我在网上也找过插入排序的Python实现,都是有错误的(大佬不要介意,我没有百度到您的可能),我希望我这个能让你理解插入排序。