演算法思想:每次將乙個待排序的記錄按其關鍵字大小插入到前面已排好的子串行中,知道全部記錄插入完成。
//第一部分:排序演算法
//9-3 直接插入排序
//直接插入排序
void
insertsort
(int a,
int n)}}
//優化--折半插入排序(帶哨兵)
void
insertsort
(int a,
int n)
for(j=low;j<=i-
1;j++
) a[j+1]
=a[j]
; a[low]
=a[0];
}}}
注意:折半插入排序一直到low>high時才停止折半查詢,當mid所指元素等於當前元素時,應繼續令low=mid+1,以保證「穩定性」,最終應將元素插入到low所指位置(即high+1)。
空間複雜度:o(1)
時間複雜度:
最好(原本有序):o(n);
最壞(逆序):o(n2);
平均:o(n2);
穩定性:穩定
排序演算法總結 直接插入排序
直接插入排序的過程是 1.將整個待排序的記錄序列劃分成有序區和無序區,初始時有序區為待排序記錄序列中的第乙個記錄,無序區包括所有剩餘待排序的記錄 2.將無序區的第乙個記錄插入到有序區的合適位置中,從而使無序區減少乙個記錄,有序區增加乙個記錄 3.重複執行第二步,直到無序區中沒有記錄為止。第一步的解決...
直接插入排序演算法
直接插入演算法 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序演算法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複...
直接插入排序演算法
撲克牌是我們幾乎每個人都可能從事過的遊戲。而最基本的撲克玩法都是一邊摸牌,一邊理牌。假如我們拿到了這樣一手牌,如圖9 5 1。啊,似乎是同花順呀,別急,我們得理一理順序才知道是否是真的同花順。請問,如果是你,應該如何理牌呢?應該說,哪怕你是第一次玩撲克牌,只要認識這些數字,理牌的方法都是不用教的。將...