排序算法——直接插入排序

直接插入排序:

  有一些教材上(我使用的教材就是如此)把直接插入排序理解成存在兩表,一個有序,一個無序,每次從無序表中取出元素,插入到有序表中的合適的位置中,使得“有序表”仍然有序,如此循環操作,最後得到一個有序的列表。我個人這樣並覺得不好理解(當時我就一直在找那兩個表在哪裏??哈哈,搞笑)。

  經過我個人的理解消化之後,思路大概是這樣的:舉個例子,假設一個待排序的序列{57,68,59,52,60}

  首先,第一輪,從第2個元素,也就是68開始,與第1個元素(57)進行比較,68>57,那麼兩個保持原來的位置,不換位,所以該序列還是{57,68,59,52,60}

  第二輪,到第3個元素(59)進行排序,拿59和前面的元素比較,一旦發現有比它大的元素,那麼程序就會把那個大的元素後移。那麼現在可以看到,當它比較到68時,發現68>59,於是68後移一位,那麼68原來的位置就空了出來,59再往前與57比較,57<59,那麼比較結束,57就填補到68之前的位置,即第二位。於是該序列現在就成了{57,59,68,52,60}

  輪,到第4個元素(52)進行排序操作,比較的方式還是和之前的一樣,一旦發現有比它大的元素,就暫停,將大的那個元素後移一位。那麼可以知道,68、59、57都會後移一位,那麼這個序列的第1的位置就空了出來,那麼52會插入到第1的位置,所以,現在的序列爲{52,57,59,68,60}

輪,同理,我們這下就很快地知道,在這一輪裏,68會後移一位,60插到第4的位置,序列變成{52,57,59,60,68}

至此,排序結束。


總結一下:

直接插入排序的思想大概就是:將待排序的元素array[i]與前面的已經排好序的元素(這就是部分教材上所說的的“有序表”部分)進行比較,查找到合適的“安身之所”,部分元素整體後移一位,騰出位置給元素array[i],使“有序”部分依然有序,如此循環操作,最後就會得到一個有序的序列表,排序的次數爲n-1輪(n爲待排序元素個數)。

實現代碼:


結果輸出:



發佈了26 篇原創文章 · 獲贊 30 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章