直接插入排序 Python实现
直接插入排序(Straight Insertion Sort)
基本思想
-
往已有的有序序列中插入需要排序的值 已排序完毕的数列是有序的 将第一个元素看做一个有序的序列,从第二个元素开始一直往前插入排序 每次插入得到元素个数加1的新序列 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,保证插入排序是稳定的
def insert_sort(arr): n = len(arr) for i in range(1,n):# 如果大于arr[i-1]就就直接插在最后开始下一个 if arr[i]<arr[i-1]: #将第i个元素与前一个已排好序列的最后一个比较 j = i - 1 temp = arr[i] # 记录当前待排序的元素 arr[i] = arr[i-1] # 将待排序元素向前移动一位 while temp<arr[j] and j>=0: # 判断待排序元素与前一位的大小,由于Python的列表存在负索引,这里要判断j>=0 arr[j+1] = arr[j] #元素后移 j = j -1 arr[j+1] = temp # 插入 showarr(arr,i) # 打印每一趟排序的结果 def showarr(arr,i): print("第"+str(i)+"次:",end=) n = len(arr) for j in range(n): print(arr[j],end= ) print( ) def test(): arr = [4,6,2,3,6,7,8,1,16,5] insert_sort(arr) if __name__ == __main__: test()
每次比较的时候与前面排好序的序列的最后一个元素开始比较,比它大就开始下一个排序,比它小则继续往前比较,找到>=的位置插入
下一篇:
Python实验四 循环结构程序设计