由於此博文並不難,所以並不需要搬出c++特性的這些大山,所以就使用簡單的c++**描述了。^_^
直接插入排序是一種簡單的插入排序法,所以適用於少量資料的排序,直接插入排序是比較穩定的一種排序演算法。
其基本思想是:把待排序的紀錄按其關鍵碼值的大小逐個插入到乙個已經排好序的有序序列中,直到所有的紀錄插入完為止,得到乙個新的有序序列。
插入排序:時間複雜度o(n^2)
in-place sort的優點在於,當需要大量資料排序時,占用記憶體非常少。
步驟大概是這樣的:
1.從第乙個元素開始,該元素可以認為已經被排序 **中 key = arr[i];就是這個意思
2.取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
3.如果該元素(已排序)大於新元素,將該元素移到下一位置
4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
5.將新元素插入到該位置後
6.重複步驟2~5
下面的圖是動畫演示,同樣是從度娘那兒討來的,畢竟自己不會做這種圖。。。。
//// 寫法1
7void insertsort_0(int arr, int
length)816
else
17break;18
}19 arr[j + 1] =key;20}
21}2223
//// 寫法2
24void insertsort_1(int arr, int
length)
2534 arr[j + 1] =key;35}
36}3738
3940
intmain()41;
43int len = sizeof iarr / sizeof(iarr[0
]);44
45 cout << "
排序前:";
46for (int i = 0; i < len; i++)
4950 cout << "
\n排序後:";
51insertsort_0(iarr, len);
52for (int j = 0; j < len; j++)
55 cout <
5657 system("
pause");
58return0;
59 }
演算法基礎 直接插入排序
一 直接插入排序 基本思想 每次將乙個待排序的序列的乙個元素,插入到已經排好序的序列中。如待排序列a 假設我們希望序列是從下到大排列的,那麼,首先將序列a分解為a1 和a2 其中a1作為排好的序列,這樣一來,首先從a2中取第乙個元素 1,與a1中的1比較,按從下到大順序把 1放入a1中,a2的其他元...
基礎演算法 直接插入排序
把陣列劃分為左右兩個區域,有序區和無序區,開始有序區只有乙個元素,就是陣列最左邊的元素。每次取得無序區第乙個元素x,從有序區最右邊的值開始到最左邊,把比x大得元素都往後移動乙個位置,直到找到乙個不大於x的位置,或者到了最左邊 即有序區所有元素都比x大,x應該插入到最前面 停下來的位置就是插入元素x的...
基礎演算法 直接插入排序
少壯不努力,老大刷水題。過去讀書的時候因為腦子不好使,很多概念,公式,演算法都記不住,等長大了,營養趕上來了,才學習的時候就會覺得更加的深刻。直接插入排序就像平常我們打撲克牌一樣,我們總是在別人發牌的時候,拿到一張牌就把它插到合適的位置上,這個過程中我們的肉眼和大腦做了3件事 1 拿到新的牌,檢查這...