直接插入排序為穩定排序,基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的、記錄數增加1的有序表。時間複雜度為o(n*n),輔助空間為o(1)。
基本思想:假設在排序過程中,記錄序列r[1..n],將記錄r[i]插入到有序子串行r[1..i-1]中,使記錄的有序序列從r[1..i-1]變為r[1..i]。r[i]的插入過程就是完成排序中的一趟,隨著有序序列的不斷擴大,最終使全部有序,完成排列。
演算法分析:要將r[i]插入到前面的有序序列中,只要將該記錄的關鍵字與第i-1個記錄開始的記錄關鍵字進行比較,當它比前面的數小時,前面的記錄順序後移,否則將該記錄存入該單元。在此,還要注意將r[i]臨時儲存到r[0]中暫存。
哨兵(監視哨)的作用:
1.作為臨時變數存放r[i]的副本。
2.在查詢迴圈中用來監視下標變數j是否越界。
演算法效率:
時間複雜度最好的情況是已經排好序,比較次數為n-1,移動次數為0;
最壞的情況是反序時進行插入排序,平均的移動次數和比較次數都是o(n*n)。
空間複雜度為o(1)。
排序特點:
1.是一種穩定的排序方法。
2.適用於接近排好序的情況。
3.適用於n較小的情況。
4.直至最後一趟排序過程才能確定乙個元素的最終位置。
從空間來看,它只需要乙個記錄的輔助空間r[0];從時間來看,n個記錄要進行n-1趟插入過程,每一趟都要進行與關鍵字的比較和記錄的移動,但是比較的次數是不固定的。最好的情況是記錄已經是排列有序的,則每一趟都只需要比較一次,就可以找到插入記錄的位置,不需移動記錄,複雜度為o(n);最壞情況是記錄逆序存放,則每一趟都要與前面的關鍵字進行比較並移動記錄,複雜度為o(n*n)。所以平均效能的複雜度為o(n*n)。
因此,直接插入排序演算法非常適合記錄基本有序且記錄數不是很多的情形。
無哨兵
void有哨兵insertsortarray()
arr[j+1]=temp;
} }
直接插入排序
直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...
直接插入排序
直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...
直接插入排序
源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...