mydjm

 

递归插入排序


 

 1 #include<stdio.h>
2
3
4 void Insert(int *a,int n)//把数组a的第n个数插入前n-1个数中,注意前n-1个数已经是排好序的了
5 {
6 int i=n-1;
7 int key=a[n];
8 while((i>=0)&&(key<a[i]))
9 {
10 a[i+1]=a[i];
11 i--;
12 }
13 a[i+1]=key;
14 return;
15 }
16
17 void InsertionSort(int *a,int n)//递归插入,跟求阶乘的思想一样,前n-1个排好序的数组,是建立在前n-2个排好序的数组的基础上插出来的
18 {
19 if(n>0)
20 {
21 InsertionSort(a,n-1);
22 Insert(a,n);
23 }
24 else
25 return;
26 }
27
28
29 void main()
30 {
31 int i,n,a[30];
32 scanf("%d",&n);
33 for(i=0;i<n;i++)
34 {
35 scanf("%d",&a[i]);
36 }
37 InsertionSort(a,n-1);
38 for(i=0;i<n;i++)
39 {
40 printf("%d ",a[i]);
41 }
42 return;
43 }


运行截图:

 

 

递归一直是自己的弱点,在算法导论插入排序的习题中看到用递归实现插入排序的思想,主要就是把n插入已排好序的n-1个数中。

在上课的时候拿张纸写了下,晚上吃完宵夜后发现这张纸,就把代码打上。一次通过,呵呵~

posted on 2012-03-20 23:27  mydjm  阅读(2978)  评论(0编辑  收藏  举报

导航