繼插入排序①,這裡說一下折半插入排序。
從前面的迴圈中可以看出直接插入排序是邊比較邊移動的。
這裡講的折半插入排序則是將比較和移動分開。(不斷的折半查詢定位再一次性的移動元素,最終插入元素)
void
insertsort
(int a,
int n)
else
//中間元素小於要插入的元素,則在後半部分
}for
(j=i-
1;j>=high+1;
--j)
//從後向前移動元素
a[high+1]
=a[0];
//到此序列中乙個元素處理結束
}}
上述**注釋很詳細,就簡單的舉個例子吧,
比如序列:5,4
開始5在有序序列中,然後從第二個元素即4開始插入,low和high均指向了5,滿足while迴圈。此時high減一,不滿足迴圈,進入for迴圈,將5向後移,4插入即可。
時間複雜度:雖然查詢位置優化了效能,但是移動原理和①相同,所以時間複雜度還是o(n*n)
穩定性:穩定
排序演算法(一) 插入排序
首先,對排序演算法 輸入 n 個數 輸出 序列的乙個排序,使得a1 a2 an 待排序的數為key 插入排序演算法,是乙個對少量元素進行排序的有效演算法.其偽 如圖 插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌...
排序演算法(一) 插入排序
一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...
排序演算法 一 插入排序
演算法實現 insertsort.c include void insertsort int arr,int len int i 0,j 0,k 0 int tmp 0 for i 1 i 0 tmp演算法思想 保證被比較值的左側為有序,在將被比較的值插入到這個有序的佇列裡。例子分析 1.首先arr...