直接插入排序
核心思想:有且只有一个元素的序列总是有序的!
类比:此种排序法可类比打牌时的抓牌阶段(同一花色A-K)
1、第一张(如红心5)不用想该怎么放,拿在手里就行了
2、第二张(如红心3),发现其比第一张(红心5)小,那就放在左边
3、第三张(如红心7),发现其比5大,也比3大,则暂时放在最右边
4、第四张(如红心4),其比7小,比5小,比3大,则放在5与3之间
5、。。。。。。直到A-K依次排序
注:比较的顺序为抓取的牌与已拍好序的牌进行比较,且从后(较大的牌)往前比较,发现抓取的牌比排好序的某张牌大就不用再比较了,反之则继续往前比较,直到找到属于自己的位置。
Python3的实现代码(直接拷贝到PyCharm运行即可):
#以一副单色纸牌为例
cards=[6,3,5,8,9,1,12,2,13,10,11,7,4]
#由于抓取第一张时不需要排序(总是有序),故从1号索引元素开始
#第一层排序保证所有的纸牌都能被抓取
for x in range(1,len(cards)):
#第二层排序的含义:抓取到的纸牌与已在手里排好序的纸牌倒序比较
for i in range(x-1,-1,-1):
#cars[i]-手里的一张牌(正在与其比较)
#cars[i+1]-抓到的牌
if cards[i]>cards[i+1]:
temp=cards[i]
cards[i]=cards[i+1]
cards[i+1]=temp
print(cards)
#运行结果:
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
简单的东西也要手动把代码敲出来才能更好的理解~