使用python实现排序算法(Insertion Sort)

所谓排序算法,就是按序列中数据值的大小,进行递增或递减排列的操作。插入排序(Insertion Sort)是众多排序算法中的一种。插入排序算法通过对未排序数据序列中的每一个数据从后到前进行反复的对比,找到数据在序列中相应的位置。

Insertion-Sort
算法描述:

插入排序算法简单直观,具体步骤及描述如下:

1,将未排序的数据序列分为已排序和未排序两部分,初始状态中默认序列中的第一个元素为已排序,其他元素为未排序。
2,从未排序的数据序列中提取第一个元素,与已排序序列中的元素从后到前逐一对比。
3,如果已排序元素大于未排序元素,就将未排序元素移到这个已排序元素的前一个位置。
4,重复步骤3,直到已排序元素小于或等于未排序元素。
5,未排序元素插入到该位置,并被记录为已排序元素,参加下一轮与未排序元素的对比。
6,重复之前2-5的步骤。

insertionsort
算法实现:

  1. #导入随机数库
  2. import random
  3. #生成6个1-21之间的随机数
  4. alist=random.sample(range(1, 21), 6)
  5.  
  6. #查看生成的6个随机数
  7. alist
  8. [16, 4, 20, 7, 19, 9]
  9.  
  10. def insertion_sort(alist):
  11. #将6个随机数赋值给sequence用于排序
  12. sequence = alist[:]
  13. #输出未排序的数据序列
  14. print("原始list",sequence)
  15. #获得未排序数据序列的个数
  16. n = len(sequence)
  17. #如果数据序列中只有一个数字,则不进行排序,直接返回数据序列
  18. if n==1:
  19. return print("list只有一个数字",sequence)
  20. #循环输出未排序序列用于对比
  21. for i in range(1, n):
  22. #未排序序列对应的值
  23. value = sequence[i]
  24. #未排序数据序列位置编码
  25. position = i
  26. #输出本次用于对比的未排序序列值与位置编码
  27. print("第",i,"次取值:","位置:%s"%i,"数值:%s"% value)
  28. #设置数值对比的停止条件,返回list的第一个位置或未排序数值大于前一个位置的数值循环即停止(False)
  29. while position > 0 and value < sequence[position - 1]:
  30. #输出循环判断条件及结果
  31. print("判断条件:位置:",position,">0 ?","AND","数值:",value,"<",sequence[position - 1],"?",position > 0 and value < sequence[position - 1])
  32. #满足条件,即把值赋给list的前一个位置
  33. sequence[position] = sequence[position - 1]
  34. #输出对比值和替换值
  35. print(value,"替换",sequence[position - 1])
  36. #向前更新一个位置,继续与下一个值进行对比
  37. position -= 1
  38. #输出更新后的新位置
  39. print("向前更新一个位置:",position)
  40. #新位置如果小于0,或者下一个值小于对比值,元素插入该位置
  41. sequence[position] = value
  42. #输出本轮排序的最终结果
  43. print("第",i,"轮结果:",sequence,"\n")

排序结果及注释

  1. def insertion_sort(alist):
  2. sequence = alist[:]
  3. n = len(sequence)
  4. if n==1:
  5. return print("list只有一个数字",sequence)
  6. for i in range(1, n):
  7. value = sequence[i]
  8. position = i
  9. while position > 0 and value < sequence[position - 1]:
  10. sequence[position] = sequence[position - 1]
  11. position -= 1
  12. sequence[position] = value
  13. print("第",i,"轮结果:",sequence)

排序结果

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—

Speak Your Mind

*