开篇
今天的目标是实现插入排序算法,思路如下:
手动输入一串数字,数量不限,最后输出排序后的数列。
关于插入排序算法
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
代码
# 手动输入数列
def main():
text = input("请输入整数数列,以空格隔开>>
")
type = int(input("升序排列请输入1,降序排列请输入2>>
"))
nums = text.split() #将字符串转为数组
orderNums = charu(nums,type)
print("排序后的数列:",orderNums)
#插入算法
def charu(nums,type):
for i in range(1,len(nums)): #从第二个数开始跟前边的数列进行比较
index = i #用来存储要插入的位置
current = nums[i] #用于存储当前要插入的值
for k in range(i-1,-1,-1): #前边的数列,从后到前的顺序进行比较;
if type == 1:
if int(current) < int(nums[k]):
nums[k+1] = nums[k]
index = k
else:
break
else:
if int(current) > int(nums[k]):
nums[k+1] = nums[k]
index = k
else:
break
nums[index] = current
return nums
#运行主程序
main()总结
打扑克的既视感,哈哈
知识点总结:
1. 用到了range的倒序方式,range(a,b,c)第三个值c(步长),如果是-1,则表示每一次都减1;如果c == -2,则每一次循环都减2。
2. range(a,b,c)中,b的值本身是不会参与循环的,所以要注意循环的范围;
| 留言与评论(共有 0 条评论) “” |