【算法导论】插入排序

 

题外话: 这是我写的系列算法导论学习笔记的第一篇:插入排序。写下来是为了更好的理解它。

插入排序的原理:从第二个元素开始,通过将其与前面元素比较,将其插入正确的位置。

 

伪代码:

      insert_sort(A)

    for j = 2 to A.length

      k = A[j]

      i = j - 1

      while i>=0 and A[i]>k

        exchange A[i] with A[i+1]

        i = i -1

      A[i+1] = k

 

举例:

原始数据:  3,1,5,2,4,7,8,6

第一步   :  1,3,5,2,4,7,8,6     1与3交换

第二步   :  1,3,5,2,4,7,8,6     5在正确位置,不变

第三步   :  1,2,3,5,4,7,8,6     2插入到3前面 

第四步   :  1,2,3,4,5,7,8,6     4插入到5前面

第五步   :  1,2,3,4,5,7,8,6     7保持不变

第六步   :  1,2,3,4,5,7,8,6     8保持不变

第七步   :  1,2,3,4,5,6,7,8     6插入到7前面,排序完成

 

算法复杂度分析:θ(n^2)

 

C++源代码:

 

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 void insert_sort(int *a,int n){
 6     int i,j,k;
 7     for(j=1;j<n;j++){
 8         k = a[j];
 9         i = j - 1;
10         while(i>=0 && a[i]>k){
11             a[i+1] = a[i];
12             i--;
13         }
14         a[i+1] = k;
15     }
16 }
17 
18 int main(){
19     int a[10]={3,1,5,2,4,7,8,6};
20     insert_sort(a,8);
21     for(int i=0;i<8;i++){
22     cout<<a[i]<<" ";
23     }
24 }

 

posted @ 2015-05-06 13:41  Feee  阅读(169)  评论(1)    收藏  举报