直接插入排序基本思想:假設待排序的記錄存放在陣列r[1..n]中。初始時,r[1]自成1個有序區,無序區為r[2..n]。從i=2起直至i=n為止,依次將r[i]插入當前的有序區r[1..i-1]中,生成含n個記錄的有序區。
通過下面乙個排序的例子,來幫助我們理解直接插入排序的思想。我們假設下面無序的序列開頭數字為3為乙個有序的數列,依次將1,6,4,8,2,9,5,7插入進來。 3
1 6 4 8 2 9 5 7 3>1,交換位置
1 3
6 4 8 2 9 5 7 3<6,位置不變
1 3 6
4 8 2 9 5 7 6>4,位置交換
1 3
4 6 8 2 9 5 7 3<4,位置不變
1 3 4
68 2 9 5 7 8<6,位置不變
……重複上面的排序過程。就能得到乙個有序的序列。
**
//直接插入排序(帶哨兵)
public static void sort(int arr)
arr[j + 1] = temp;}}
}
帶哨兵的插入排序中的哨兵元素有兩個作用:
1、暫時存放待插入的元素
2、防止陣列下標越界,當待插入的元素小於已排序的子陣列中的最小元素時,j=-1,越界,而採用哨兵,arr[0]
穩定 空間複雜度o(1)
時間複雜度o(n2)
最差情況:反序,需要移動n*(n-1)/2個元素
最好情況:正序,不需要移動元素
排序演算法 直接插入
簡介 插入排序 insertion sort 是一種簡單直觀且穩定的排序演算法。基本思想是 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,直到所有待排序記錄全部插入為止。圖示 類似玩撲克牌遊戲時,按序排列紙牌。示例 include using namespace ...
直接插入排序演算法
直接插入演算法 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序演算法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複...
直接插入排序演算法
撲克牌是我們幾乎每個人都可能從事過的遊戲。而最基本的撲克玩法都是一邊摸牌,一邊理牌。假如我們拿到了這樣一手牌,如圖9 5 1。啊,似乎是同花順呀,別急,我們得理一理順序才知道是否是真的同花順。請問,如果是你,應該如何理牌呢?應該說,哪怕你是第一次玩撲克牌,只要認識這些數字,理牌的方法都是不用教的。將...