插入排序算是排序演算法中最簡單的一種了,實現起來也是比較簡單的。演算法的複雜度為
o(n2
),雖然複雜度比較高,但這並不意味著其它複雜度低的排序演算法(並、
快排等)在任意的輸入序列下其效能都比插入排序來得好。其原因主要有以下兩點:
因此插入排序作為乙個實現起來比較容易的演算法來講,它對實現者的程式設計素養沒有太高的要求,因為**量比較少。而且對於較小的
n來說其優勢也很明顯。事實
上,在實際的快排實現中,當
n小於某個值時就可直接利用插入排序來對待排陣列進行排序,而不是繼續的利用快排遞迴下去。這個值通常可取為
10。
所謂插入排序就是假定待排陣列
a前面的
0到j-1個元素已經排好序了,而將第
j個元素插入到前面元素的某個位置
k,使得
a[k-1] <= a[k] < a[k+1](這裡忽略了
邊界情況,且以非降序排列
)。下面是乙個插入排序的
c++實現:
#include
template < typename comparable >
void insertion_sort( std::vector< comparable > & array, int begin, int end )
else
break;
} }}
上面的**可以進一步優化,因為std::swap包含三個賦值語句,沒必要在內部迴圈裡執行那麼多賦值操作,因此優化後的**如下:
#include
template < typename comparable >
void insertion_sort( std::vector< comparable > & array, int begin, int end )
else
break;
} array[ j ] = temp;
}}
我們可以先把待插入的元素儲存起來,這樣在迴圈內部就只需要一條賦值語句,最後再將該值插入到恰當的位置。
C 實現插入排序
感謝morewindows的文章,造福我等學渣啊 複雜度應該也是o n 2 using system using system.collections.generic using system.linq using system.text namespace 排序 if j i 1 將待插入的a i...
插入排序 C 實現
寫給自己!插入排序演算法,其如同打牌,手裡總是已經排好續的牌,而桌面上的是未知牌,其思想是 拿起一張牌,與手中的牌從右到左 從大到小 進行比較,找到合適的位置插入即可。插入排序演算法沒有合併排序算好效率高,他隨著輸入的增大而增大。思想 對於將要插入的第j個元素,與已經排序好的0 j 1個元素從j 1...
插入排序C 實現
演算法描述 從陣列第二個元素開始向後掃瞄,將每個元素插到它前面所有元素的合適位置。下面給出整數陣列的實現,對於其他複雜型別只需實現相應的自定義比較函式即可 include include using namespace std const int num 20 void exch int s,int...