基本思想:
將乙個記錄插入到已排序好的有序陣列中,從而得到乙個新陣列,記錄數增1的有序陣列。即:先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。
要點:設立標誌,作為臨時儲存和判斷陣列邊界之用。
說明:1.準備乙個陣列
2.原理:從第二個數開始,往前面插入(前面的子陣列是有序陣列)
3.用迴圈,即可簡單完成任務
(31),25,12,64,20 原始資料
(25,31),12,64,20 第一次插入
(12,25,31),64,20 第二次插入
(12,25,31,64),20 第三次插入
(12,20,25,31,64) 第四次插入
31 25 12 64 20 原始資料
第一輪迴圈: 標誌位為num[1]; 設定temp=25
首先判斷nums[0]是不是比temp大,如果成立,前面的數往後挪一位,變為:
31 31 12 64 20第一次比較
然後把 nums[0] = temp 結果如下:
25 31 12 64 20
第二輪迴圈: 標誌位為num[2]; 設定temp=12
1.先判斷nums[1]是不是比temp大,如果成立,前面的數往後挪一位,變為:
25 31 31 64 20第一次比較
2.判斷nums[0]是不是比temp大,如果成立,前面的數往後挪一位,變為:
25 25 31 64 20第二次比較
3.找到temp應該在的地方
nums[0] = temp 結果如下:
12 25 31 64 20
第三輪迴圈標誌位為num[3]; 設定temp=64
首先判斷nums[2]是不是比temp大,如果不成立,則直接跳出,不許在比較了,結果為:
12 25 31 64 20
第四輪迴圈標誌位為num[4]; 設定temp=20
先判斷nums[3]是不是比temp大,如果成立,前面的數往後挪一位,變為:
12 25 31 64 64第一次比較
判斷nums[2]是不是比temp大,如果成立,前面的數往後挪一位,變為:
12 25 31 31 64第二次比較
判斷nums[1]是不是比temp大,如果成立,前面的數往後挪一位,變為:
12 25 25 31 64第三次比較
找到temp應該在的地方
nums[1] = temp 結果如下:
12 20 25 31 64
public
class
test
;for
(int i=
1;i)else}if
(nums[j+1]
!=temp)
}for
(int i:nums)
}}
直接插入排序思路簡單,但**邏輯較難;
演算法的優點是簡單,缺點是慢。
排序的結果穩定
插入排序之直接插入排序
插入排序概述 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為...
插入排序之直接插入排序
依次將每個記錄 無序表 插入到乙個已排好序的有序表中,得到乙個新的,記錄增加1的有序表 向撲克牌中插入新牌,圖書館整理圖書 有n個數,將第乙個數看做乙個有序表,從第二個開始從後向前比較,第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小...
插入排序之直接插入排序
packagesort.algorithm publicclassdirectinsertsort inttemp,j for int i 1 i data.length i data j 1 temp 輸出排序好的資料 for int k 0 k data.length k 直接插入排序,一般對於...