作為乙個穩定的排序演算法, 插入排序很重要,大多數程式設計師都可以很輕鬆的寫出插入排序!
先看一下插入排序的**:
void sort_insert(int a,int n)
a[j+1] = x;
i++;
}}
如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。
最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。
最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。
平均來說插入排序演算法的時間複雜度為o(n^2)。因而,插入排序不適合對於資料量比較大的排序應用。
但是,如果需要排序的資料量很小,例如,量級小於千,那麼插入排序還是乙個不錯的選擇。
由於插入排序每次插入時都在乙個已經已排序的序列中進行插入,所以利用分治的思想!我們當然也可以利用二分法進行插入。
先跟序列最中間的那個元素比較,如果比最中間的這個元素小,則插入位置在它的左邊,否則在它的右邊。
以當前最中間位置為分割點,如果在左邊,則當前最中間位置是待搜尋子串行的終點,如果在右邊,右邊鄰接的元素將是待搜尋子串行的起點。
按照這種原則,繼續尋找下乙個中間位置,並繼續這種過程,直到找到合適的插入位置為止。
最壞的情況下二分插入排序的時間複雜度依然是o(n^2),
如果待排序的序列已經有序,排序時間複雜度為o(nlogn)。
由此可見,二分插入排序的演算法已經對插入排序做了一定的優化!
好了話不多說,上**:
void sort_binary_insert(int a,int n)
a[head]=x;
i++;
}}
祝大家春節快樂! 排序之二分插入排序
二分插入排序 演算法思想簡單描述 通過構造二分插入函式,在插入第i個元素時,對前面的0 i 1元素進行折半,先跟他們 中間的那個元素比,如果小,則對前半再進行折半,否則對後半 進行折半,直到left right,然後再把第i個元素前1位與目標位置之間 的所有元素後移,再把第i個元素放在目標位置上。i...
二分插入排序
基本思想 1.取arr 1 為關鍵字key,將key插入前面已拍好的序列中。2.取arr 2 為關鍵字key,將key插入前面已拍好的序列中。3.取arr n 1 為關鍵字key,將key插入前面已拍好的序列中。include include define n 10 void binsertsort...
二分插入排序
include 二分插入法排序 二分排序的時間複雜度是o n logn 空間複雜度o 1 是穩定排序 void binary insert sort int a,int len else 如果當前元素比中間元素大,當前元素要插入到中間元素的右側 for j i 1 j high j 元素後移 a h...