插入排序算法

插入排序是归并排序的基础,插入排序的模型可以类比打牌的时候,将牌插入到合适的位置这一过程,这个过程很自然。


摸牌.png

说实在,学算法这么长的时间,对这些自然的过程反而很难用语言表述清楚,话不多说,代码如下:

def insert_sort(L):
    i = 0
    while i < len(L) - 1:
        j = i+1
        key = L[j]
        while j >= 1 and L[j-1] > key:
            L[j] = L[j-1]
            j -= 1
        L[j] = key
        i += 1
    return L

上述的代码是精简后的代码,对于我来说,这个代码虽然精简,但是有很多的步骤是合并的,导致这种代码我很少能在第一个版本里写出来(所谓的第一个版本就是按照自己的思路,白板写出来的代码),换句话说,这种精简的代码,对我来说是不自然的,我无法直接感知他的存在,阅读的时候,也不一定能够直接反应出这是插入排序,下面的代码通常是我的第一反应,代码如下:

def insert_sort(L):
    i = 0
    while True:
        if i >= len(L) - 1:
            break
        j = i+1
        key = L[j]
        while True:
            if j <= 0:
                break
            if L[j-1] <= key:
                break
            L[j] = L[j-1]
            j -= 1
        L[j] = key
        i += 1

    return L

是不是觉得有点奇怪,这两段代码是等价的,你只要对某些语句做个等价的变化就很容易的得到另外一套代码,之所以会这样,是因为我个人并不是编码的高手,我的第一反应是,我只能思考一步的动作,我很难将多个步骤合并成一步,当然,当我完成第一版本的时候,我可以通过重构来实现精简的版本。这时候你会问这两个版本那个版本才是更好的,通常意义上说,精简的版本是最好的,因为精简的版本把很多繁琐的步骤合并了,你可以通过读一句就能很好的明白代码在干什么,但是,我还是那句话,我不是编码的高手,对于我来说第二个版本才是我的第一反应,我能做的是,在完成第二个版本之后,通过重构的手段,精简成第一个版本。
每个人对编码的认识都是不同的,我相信,通过个人的这种编码习惯,你总可以找到一个适合自己的编码方式,而这种方式往往不具有通用性,它只适合你自己,因为每个人认识世界的方式都不一样,可能你我的方式比较low,但是那是我们能做的最好的程度。
之前,有人和我说多都源码,读源码你就能成为编码的高手,我一直问自己是不是真的!我的答案是,读源码是有好处的,不过更多的还是需要自己独立的思考,你要经常问自己,如果是我来做设计,我会怎么做?而不是简简单单的认为别人写的源码就是足够好的,因为,对于个人,我们的接受程度都是不同的,业务源码真的足够好,但是不一定适合你,因为那是别人认识世界的方式,对于你自己,你应该也有一套认识世界的方式,别人的方式或许比较通用,你的比较独特,不要否定自己的世界观,只能,适度的让他适应这个所谓的通用的世界观。

以后,我写的代码都是我的第一反应,因为我知道,这种方式是适合自己的,精简代码,只是另一种认识世界的方式。
另外,补充一点,我一直再说的是编码方式,而不是算法,对于特定的算法,其核心思想是一致的,也就是说,编码方式只是算法的显示表现方式,换句话说,如果算法的核心思想是有问题的,不论你采用何种编码方式,你的代码都是有问题的,算法和编码需要分开,算法的学习重要的是思想的体现,编码侧重的是实现的方面,这两个能力对于一个合格的程序员同等的重要!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容