首页 > 编程语言 > 详细

插入排序

时间:2016-01-01 22:58:16      阅读:199      评论:0      收藏:0      [点我收藏+]

  最近一段时间的博客都是记录我读《算法导论》的文字,虽然很厚,但是一点一点来吧,总有一天会看完的。虽然只看了几页,感觉收获还挺多的,原来懂了算法,却不一定能做出最好的代码(姿势很重要啊Orz。。),果然要跟着导论学习正确的姿势。

2016.1.1 今天看了两个算法:插入排序和归并排序。代码如下(C语言)

 

插入排序

 1 #include<stdio.h>
 2 
 3 void insertsort(int *a,int n) //默认存储到a[1..n]中 
 4 {
 5     int i,j;
 6     j=2;
 7     for (j=2;j<=n;j++) {
 8         i=j-1;
 9         int key=a[j];
10         while (i>0 && a[i]>key) {
11             a[i+1]=a[i];
12             i--;
13         }
14         a[i+1]=key;
15     }
16 }
17 
18 int main()
19 {
20     int n;
21     int a[11]={};
22     scanf("%d",&n);
23     int i;
24     for (i=1;i<=n;i++) {
25         scanf("%d",&a[i]);
26     }
27     insertsort(a,n);
28     for (i=1;i<=n;i++) {
29         printf("%d |",a[i]);
30     }
31     return 0;
32 }


归并排序:

#include<stdio.h>

void merge(int *a,int *b,int l,int mid,int r)
{
    int i=l;
    int j=mid+1;
    int cou=l;
    while (i<=mid && j<=r) {
        if (a[i]<a[j]) {
            b[cou]=a[i];
            i++;
            cou++;
        }
        else {
            b[cou]=a[j];
            j++;
            cou++;
        }
    }
    while (i<=mid) {
        b[cou]=a[i];
        i++;
        cou++;
    }
    while (j<=r) {
        b[cou]=a[j];
        j++;
        cou++;
    }
    for (i=l;i<=r;i++) {
        a[i]=b[i];
    }
}

void mergesort(int *a,int *b,int l,int r)
{
    if (l<r) {
        int mid=(l+r)/2;
        mergesort(a,b,l,mid);
        mergesort(a,b,mid+1,r);
        merge(a,b,l,mid,r);
    }
}

int main()
{
    int a[11]={},b[11]={};
    int n,i;
    scanf("%d",&n);
    for (i=0;i<n;i++) {
        scanf("%d",&a[i]);
    }
    mergesort(a,b,0,n-1);
    for (i=0;i<n;i++) {
        printf("%d |",a[i]);
    }
    return 0;
}

 

插入排序

原文:http://www.cnblogs.com/itlqs/p/5093883.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!