【算法-排序之三】插入排序

 插入排序是一種簡單的排序算法,這是一種從小範圍到大範圍的遞歸思想,這種思想類似於數學推導中的遞歸,首先在最小規模n(1個數的隊列)滿足要求,再考慮n+1時需要的操作,遞歸直到最終的結果。當問題規模很大無從下手時,在問題最小規模點思考,然後逐漸遞加,不失爲一個很好的選擇。
         1.插入排序InsertSort
         核心:以一個人爲初始序列,從第二個人開始每次將一個人插入該隊列中
         明白了插入排序的核心,你能輕易理解插入排序的步驟:
         1.將第一個數作爲起始序列
         2.將下一個數插入序列,
         3.直到所有數全部插入序列,得到完整有序結果
                                       
                                        以3爲起始序列,分成如下
                              
                                        將9插入左邊的序列
                             
                                     將5插入左邊的序列
                           
            左邊的有序序列會慢慢將右邊的序列全部包含,最後左邊的序列便是我們需要最終有序結果。需要注意的是,在插入數時,需要根據插入數的大小找到相應的插入位置。
              
              下面是可複製代碼:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
void InsertSort(int Array[],int num){
int i; //控制排序遍數
int m; //控制插入
for(i=1;i<num;i++){
int temp=Array[i]; //保存要插入有序列的數
m=i-1; //此時有序列有i-1個數
while(m>=0 && Array[m]>temp){
Array[m+1]=Array[m];
m--; //將比要插入數大的往後移動一位
}
Array[m+1]=temp; //空出來位置的插入插入數
}
}
 來自CODE的代碼片
InsertSort.c
           2.時間複雜度
            O(n*2),插入排序的時間複雜度分析較爲複雜,有興趣可以探究一下。
           3.空間複雜度
           一個額外交換空間,O(1)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章