前兩篇跟大家講了c/c++基礎陣列排序的選擇排序和氣泡排序,現在再給大家分享一下插入排序演算法:
其實插入排序跟我們軍訓排隊一樣的,軍訓排隊一般是按各人身高排的,個矮的站前面,個高的站後面:
他的操作是:將乙個數插入到其他已經有序的陣列中適當的位置(按一定規則)比如排隊,他就需要站在乙個比他矮的人後面但是比他高的人前面的位置,然後為了給他挪出來乙個位置,他後面的人是不是都應該要挪開乙個位置呢?
還是假設我們有乙個陣列,我們要怎麼做呢?
如上圖,我首先取陣列第乙個(50)組成乙個現有佇列,然後逐一再從原始序列中取出資料插入到現有佇列中適當位置,這樣只需要(陣列長度-1)次迴圈就可以完成工作。
我們看下**怎麼實現:
看下執行結果,確認下有沒有問題:
ok,沒有問題。
其實插入排序的核心就是:將元素插入已有序列,逐一跟現有序列元素比較,然後滿足比較條件的就換位置,知道找到自己合適的位置。
最後奉上源**:
#include
#include
using namespace std;
int main()
int arr[7] = ;
//從第二個元素開始去插入,所以從i=1開始
for (int i = 1; i < sizeof(arr)/sizeof(int); i++)
//這個迴圈就是我在圖示中表示的過程,最大的從前往後滾
for (int j = i; j >0; j--)
if(arr[j]
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp ;
//我們來輸出一下看看排序成功沒
for (int i = 0; i < sizeof(arr)/sizeof(int); i++)
cout<
system("pause");
return 0 ;
氣泡排序,插入排序
前提 void x sort elementtype a,int n 大多數情況下,為簡單起見,討論從小大的整數排序 n是正整數 只討論基於比較的排序 有定義 只討論內部排序 穩定性 任意兩個相等的資料,排序前後的相對位置不發生改變 沒有一種排序是任何情況下 都表現最好的 氣泡排序 void bub...
氣泡排序 插入排序
學習思路 思路講解 實現 1 通過雙重迴圈,相鄰兩個資料做對比,通過位置交換使其變得有序 2 時間複雜度 分析 解釋 外部迴圈從0開始i 內部迴圈從0開始j,完整迴圈後會將本次最大值放入陣列最後,下次迴圈可忽略相應的尾部資料 length i 1 重複1 2步即可完成排序 實現 public cla...
排序 之 選擇排序,插入排序,氣泡排序
主要思想 1 插入排序 若只有乙個元素時看做有序,將第二個 第三個 第n個元素依次插入有序 公升序或降序 的序列中,將第n個元素插入後,整個序列為有序。2 氣泡排序 從第乙個元素開始,依次將其和其後的乙個元素做比較,若該元素大於 或小於 其後的元素,將兩個元素交換順序,一趟結束後,第n個元素為最大 ...