《算法导论》学习笔记01——插入排序之递归程式

题目:(见于《算法导论》原书第二版P22,2.3-4)

插入排序可以如下改成一个递归过程:为排序A[1…n],首先递归地排序A[1…n-1],然后再将A[n]插入到已排序的数组A[1…n-1]中去。对于插入排序的这一递归版本,为它的运行时间写个递归式。

在看《算法导论》之前,从来没有想过使用递归的方式实现插入排序。

此前对于插入排序,很容易就想到了这段代码:

 1 void insertsort(vector<int> a, int n)
 2 {
 3     int i,j,temp;
 4     for(i=1; i<n; i++)
 5     {
 6         temp=a[i];
 7         for(j=i; j>0&&temp<a[j]; j--)
 8         {
 9             a[j]=a[j-1];
10         }
11         a[j]=temp;
12     }
13 }

如今在《算法导论》此书看到这道题,就尝试了一下使用递归的方式实现插入排序:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void insert(int a[], int n)
 5 {
 6     int temp=a[n];
 7     for(int i=n-1; i>=0 &&temp<a[i]; i--)
 8         a[i+1]=a[i];
 9     a[i+1]=temp;
10 }
11 
12 void insertsort(int a[], int n)
13 {
14     if(n>0)
15     {
16         insertsort(a,n-1);
17         insert(a,n);
18     }
19 }
20 
21 int main()
22 {
23     int a[10]={2,3,1,6,4,7,9,8,0,5};
24     insertsort(a,10);    
25     for(int j=0; j<10; j++)        
26         cout<<a[j]<<" ";    
27     cout<<endl;    
28     return 0;
29 }

关于运行时间的递归式就不写了。

推荐一下:MIT算法导论的网络课程

 

posted on 2012-09-22 19:27  kaka_  阅读(989)  评论(0编辑  收藏  举报

导航