插入排序

在这里插入图片描述
一开始并没有搞懂插入排序是怎么运作的,但是发现有点像打扑克牌整理牌时有点像,就领悟到了精髓,不多说先附上代码,问题下面再说。

插入排序

	#!/usr/bin/python3
	#插入排序
	import random
	
	lst=[]
	for i in range(10):
	    lst.append(random.randint(1,100))
	print(lst)
	
	for i in range(1,len(lst)):
	    n=lst[i]
	    j=i
	    while n<lst[j-1] and j>=1:
	         lst[j]=lst[j-1]
	         j=j-1
	    lst[j]=n
	#    for j in range(i,-1,-1):
	#        if n>=lst[j-1]:
	#            break
	#        else:
	#            lst[j]=lst[j-1]
	#    lst[j]=n
	print(lst)

可以看到我有注释的部分,是我用for循环做出来的,现在说起来云淡风轻,但是写这段代码时可是痛苦万分。
我先是用for循环写的,思路很容易就想到,但是bug就是改不掉,总是无法给第一个数排序,自己用纸和笔把程序过了一遍又一遍,发现了就是第二个循环条件的问题,但是那天脑子已经懵了,所以我先是用while循环做了一遍,while循环很是简单的就做了出来。
第二天早起后,利用python里有负索引这个东西,直接将内层循环的stop给到了-1,这样子索引不会超出范围,如果当前循环的i索引的数字是最小的时候,也能和0索引的数字进行互换,但是对于while循环来说这个就很容易想到,因为即使i索引所在的数是最小的时候,j-1之后直接跳出循环,i和0的数字就可以直接互换,不需要想太多。
从那以后,我写循环就会考虑while多一些了(因为水平有限,很多循环都是用for写的),还有,脑子懵了的时候千万不要写代码,只会把自己绕进去浪费时间,不如放松放松再去思考,效率会高很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值