今天我學習的是插入排序,插入排序主要思想是:把要排序的數字插入到已經排好的數據中。(我自己理
解的哈)。例如12356是已經排好的序,我們將4插入到他們中,時插入之后也是排好序的。這里顯而易見
是插入到3的后面。變為123456.
實現思路:插入排序就是先是一個有序的數據,然后把要插入的數據插到指定的位置,而排序首先給的就
是無序的,我們怎么確定先得到一個有序的數據呢?答案就是:如果只有一個,當然是有序的咯。我們先
拿一個出來,他是有序的,然后把數據一個一個插入到其中,那么插入之后是有序的,所以直到最后都是
有序的。。哈哈。結果就出來了!
當然在寫的時候還是有一個技巧的,不需要開額外的數組,下標從第二個元素開始遍歷知道最后一個,然
后插入到前面已經有序的數據中。這樣就不會浪費空間了。插入排序用處還是很多的,特別是鏈表中,因
為鏈表是指針存放的,沒有數組那么好準確的用下標表示,插入是簡單有效的方法。嘻嘻。。廢話少說,
源代碼奉上:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 //插入排序從下到大,nData為要排序的數據,nNum為數據的個數,該排序是穩定的排序
5 bool InsertionSort(int nData[], int nNum)
6 {
7 for (int i = 1; i < nNum; ++i) //遍歷數組,進行插入排序
8 {
9 int nTemp = nData[i];
10 for (int j = 0; j < i; ++j) //對該數,尋找他要插入的位置
11 {
12 if (nData[j] > nTemp) //找到位置,然后插入該位置,之后的數據后移
13 {
14 for (int k = i; k > j; --k) //數據后移
15 {
16 nData[k] = nData[k -1];
17 }
18 nData[j] = nTemp; //將數據插入到指定位置
19 break;
20 }
21 }
22 }
23
24 return true;
25 }
26
27 int main()
28 {
29 int nData[10] = {4,10,9,8,7,6,5,4,3,2}; //創建10個數據,測試
30 InsertionSort(nData, 10); //調用插入排序
31
32 for (int i = 0; i < 10; ++i)
33 {
34 printf("%d ", nData[i]);
35 }
36
37 printf("\n");
38 system("puase");
39 return 0;
40 }