插入排序的c 實現

2021-06-23 09:46:37 字數 1080 閱讀 5467

插入排序算是排序演算法中最簡單的一種了,實現起來也是比較簡單的。演算法的複雜度為

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...