本來是想對插入排序做乙個詳細的說明——從演算法原理、演算法優劣、演算法實現一一說起。但是要將演算法原理說的通俗易懂,不是個簡單的事情,常常需要很好的文筆和配上詳細的圖。但是最近需要複習準備面試,確實沒什麼時間去寫一系列完整地說明演算法的部落格,所以這次就只是寫下演算法實現(c++**)的細節和詳細注釋,找到新工作有空餘時間後之後會陸續對這一系列演算法進行詳細說明。這一系列的演算法部落格不再贅敘。
插入排序,實現簡單。在序列基本有序的時候,效率是很高的,所以stl的sort方法中就採用了插入排序方法(stl中的sort()方法採用的是名為introsort排序,這個排序由快速排序、插入排序、堆排序組合而成)。
實際專案中會考慮**的復用,這裡暫且忽略版本之間的**復用,以後不再贅敘。
/**
* 插入排序(非降序版)
*/template void insertionsort(vector& source)
// 將key插入其應該在位置
source[j + 1] = key;
}}
更一般的,對乙個區間內的元素排序
/**
* 對某一區間進行插入排序,採用stl的[begin, end)風格
* 即半必半開區間,對[begin, end)之間的元素進行插入排序
*/template
void insertionsort(vector
& s, int begin, int end)
s[j + 1] = key;
}}
1)插入排序
直接插入排序的理解 來自維基百科 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等...
1 插入排序
一種增量式的做法 在處理少量資料元素進行排序的有效演算法。由內外兩層for迴圈構成,內迴圈做比較,外迴圈控制哪個是插入值。排序引數是乙個陣列 a 1 n 包含n個待排序數 a j 先放入key變數中。將陣列邏輯劃分為 手牌區 a 1 j 1 key區域 a j 和 待插入區 a j 1 n 開始時手...
排序1 插入排序
讓我們開始排序的學習吧,首先我們先理解一下插入排序的基本思想 每一趟將乙個待排序的記錄,按其關鍵字的大小插入到已經排好序的一組記錄的適當位置上,知道所有待排序記錄全部插入為止。這個可能會和選擇排相似,但是那個是設定最大或最小,然後依次找到最大或最小插入到特定位置,而選擇依次比較後移或前移,不要混淆哦...