直接插入排序:
有一些教材上(我使用的教材就是如此)把直接插入排序理解成「存在兩表」,乙個有序,乙個無序,每次從無序表中取出元素,插入到有序表中的合適的位置中,使得「有序表」仍然有序,如此迴圈操作,最後得到乙個有序的列表。我個人這樣並覺得不好理解(當時我就一直在找那兩個表在**??哈哈,搞笑)。
經過我個人的理解消化之後,思路大概是這樣的:舉個例子,假設乙個待排序的序列
首先,第一輪,從第2個元素,也就是68開始,與第1個元素(57)進行比較,68>57,那麼兩個保持原來的位置,不換位,所以該序列還是;
第二輪,到第3個元素(59)進行排序,拿59和前面的元素比較,一旦發現有比它大的元素,那麼程式就會把那個大的元素後移。那麼現在可以看到,當它比較到68時,發現68>59,於是68後移一位,那麼68原來的位置就空了出來,59再往前與57比較,57<59,那麼比較結束,57就填補到68之前的位置,即第二位。於是該序列現在就成了;
第三輪,到第4個元素(52)進行排序操作,比較的方式還是和之前的一樣,一旦發現有比它大的元素,就暫停,將大的那個元素後移一位。那麼可以知道,68、59、57都會後移一位,那麼這個序列的第1的位置就空了出來,那麼52會插入到第1的位置,所以,現在的序列為;
第四輪,同理,我們這下就很快地知道,在這一輪裡,68會後移一位,60插到第4的位置,序列變成。
至此,排序結束。
總結一下:
直接插入排序的思想大概就是:將待排序的元素
array[i]
與前面的已經排好序的元素(這就是部分教材上所說的的「有序表」部分)進行比較,查詢到合適的「安身之所」,部分元素整體後移一位,騰出位置給元素
array[i]
,使「有序」部分依然有序,如此迴圈操作,最後就會得到乙個有序的序列表,排序的次數為n-1輪(n為待排序元素個數)。
實現**:
結果輸出:
排序演算法 插入排序 直接插入排序
package 插入排序 直接插入排序 從後向前找到合適位置後插入 穩定 基本思想 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。public class 直接插入排序 system.out.println 排序之前 fo...
排序演算法 插入排序 直接插入排序
當插入第i i 1 個元素時,前面的v 0 v i 1 等i 1個 元素已經有序。這時,將第i個元素與前i 1個元素v i 1 v 0 依次比較,找到插入位置即將v i 插入,同時原來位置上的元素向後順移。在這裡,插入位置的查詢是順序查詢。直接插入排序是一種穩定的排序演算法,其實現如下 public...
排序演算法 直接插入排序
思想 每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中 依次進行下去,進行了 n 1 趟掃瞄以後就完成了整個排序過程。演算法複雜度 如果目標是把...