直接插入排序

直接插入排序比起冒泡和選擇稍微難理解一點,不過也好,畢竟是簡單排序,也就是那種比一目瞭然多想幾下的程度。
  它的基本思想是什麼呢?
  插入插入無非就是插入,插入哪啊?插入亂序數列?那顯然不可能,那是胡插。
  不是插入亂序數列那就是插入有序數列嘛,非黑即白多好記的。
  如何插入有序數列呢,給我的數列一般都是打亂的啊,我怎麼判斷哪裏有序了。
  其實答案就藏在身邊。   一個數字是無序的嗎?不,它顯然不是,既然不是無序,那就是有序了唄,又一次非黑即白的事情。是不是有一種不識廬山真面目,只緣身在此山中的感覺呢。
  有人說廢話,那豈不是每個數字都有序了,是,沒錯,的確每個數字都有序,並且這種思想在以後的歸併排序也會用到,如果你能想到這兒代表你的舉一反三能力還不錯,但目前我們只需要最好找的有序數列就行了。
我們就取第一個數字,把它當作有序數列。然後幹嘛?當然是把第二個數插進去了啊,怎麼插?比第一個數大就放第一個數後面(位置沒變),如果比第一個數小就放它前面。怎麼放?要用到0號下標哨兵位啊,把他當作常用的交換變量tmp看就行了,arr[0]=arr[2] ;arr[2]=arr[1];arr[1]=arr[0]  這不就插進去了,然後出來一個嶄新的長度爲2的有序數列,然後再輪到第三個數,把它插入這個新的有序數列,就變成了更 加嶄新的長度爲3的有序數列,這樣依次插完,不就全有序了?
以下是代碼實現:

1萬個隨機數據的結果和運行時間:



比起冒泡和選擇都快了許多
時間複雜度
最好O(n) 最壞O(n^2)  平均 O(n^2)  
它是穩定的,因爲每次插入有序數列時,遇到和自己相同的值,就插在了它的後面,並沒有亂越相同值的位置。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章