Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134311
  • 博文数量: 33
  • 博客积分: 287
  • 博客等级: 二等列兵
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-13 23:06
文章分类
文章存档

2015年(3)

2014年(13)

2013年(8)

2012年(9)

我的朋友

分类: C/C++

2014-02-26 17:08:15

看了几个程序,有冒泡排序、归并排序、插入排序等。
冒泡排序,是时间常数最大的,每次循环将最大的元素放到最后,
插入排序,每次取出后一个元素,和前面的元素比较,大的放在后面。
归并排序,

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define len 5

  4. int a[len]={11,5,2,4,7};

  5. void insert()
  6. {
  7.     int tmp;
  8.     int i,j,m;
  9.     for( i=0;i<len-1;i++)
  10.     {
  11.         for( j=0;j<=i;j++)
  12.         {
  13.             tmp=a[j+1];


  14.             if(a[j]>a[j+1])
  15.             {


  16.                 a[j+1]=a[j];

  17.                 a[j]=tmp;

  18.             }
  19.         }
  20.         // for(m=0;m<len;m++)
  21.         // printf("buble iiiiiii a[%d]=%d\n",m,a[m]);
  22.         printf("%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4]);


  23.     }



  24. }


  25. void buble()
  26. {
  27.     int tmp;
  28.     int i,j,m;
  29.     for ( i=0;i<len;i++)
  30.     {
  31.         for( j=0;j<len-i-1;j++)
  32.         {
  33.             if(a[j]>a[j+1])
  34.             {
  35.                 tmp=a[j];
  36.                 a[j]=a[j+1];
  37.                 a[j+1]=tmp;
  38.             }


  39.             //printf("buble i= %d a[%d]=%d\n",i,j,a[j]);
  40.         }

  41.         for(m=0;m<len;m++)
  42.             printf("buble bbbbb a[%d]=%d\n",m,a[m]);


  43.     }


  44. }


  45. int main(void)
  46. {
  47.     // int a[len]={10,5,2,4,7}
  48.     int i;
  49.     for(i=0;i<len;i++)
  50.         printf("buble x a[%d]=%d\n",i,a[i]);

  51.     insert();
  52.     //buble();

  53.     for(i=0;i<len;i++)
  54.         printf("buble xxx a[%d]=%d\n",i,a[i]);
  55.     // buble( a[len],len);

  56. }
插入排序图例:

归并排序:

将大的序列转换成小的





点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #define LEN 9
  3. int a[LEN]={5,2,4,7,1,3,2,8,6};

  4. void merge(int start ,int mid,int end)
  5. {
  6.    int n1=mid-start + 1;
  7.    int n2=end-mid;
  8.    int left[n1],right[n2];
  9.    int i,j,k;

  10.    for(i=0;i<n1;i++)
  11.        left[i]=a[start+i];

  12.    for(j=0;j<n2;j++)
  13.        right[j]=a[mid+1+j];
  14.    i=0;
  15.    j=0;
  16.    k=start;
  17.    for(;i<n1&&j<n2;)
  18.     {
  19.       if(left[i]<right[j])
  20.          a[k++]=left[i++];
  21.     
  22.       else
  23.          a[k++]=right[j++];
  24.     
  25.     }
  26.    while(i<n1)
  27.          a[k++]=left[i++];

  28.    while(j<n2)
  29.          a[k++]=right[j++];


  30. }
  31. void sort(int start,int end)
  32. {
  33.   int mid;
  34.   if(start<end)
  35.   {
  36.     mid=(start+end)/2;
  37.     printf("sort (%d~%d,%d~%d) %d %d %d %d %d %d %d %d %d\n",start,mid,mid+1,end,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
  38.     sort(start,mid);
  39.     sort(mid+1,end);
  40.     merge(start,mid,end);

  41.     printf("merge (%d~%d,%d~%d) %d %d %d %d %d %d %d %d %d\n",start,mid,mid+1,end,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
  42.   }


  43. }
  44. int main(void)

  45. {
  46.   sort(0,LEN-1);
  47.   


  48. }

output

sort (0~4,5~8) 5 2 4 7 1 3 2 8 6
sort (0~2,3~4) 5 2 4 7 1 3 2 8 6
sort (0~1,2~2) 5 2 4 7 1 3 2 8 6
sort (0~0,1~1) 5 2 4 7 1 3 2 8 6
merge (0~0,1~1) 2 5 4 7 1 3 2 8 6
merge (0~1,2~2) 2 4 5 7 1 3 2 8 6
sort (3~3,4~4) 2 4 5 7 1 3 2 8 6
merge (3~3,4~4) 2 4 5 1 7 3 2 8 6
merge (0~2,3~4) 1 2 4 5 7 3 2 8 6
sort (5~6,7~8) 1 2 4 5 7 3 2 8 6
sort (5~5,6~6) 1 2 4 5 7 3 2 8 6
merge (5~5,6~6) 1 2 4 5 7 2 3 8 6
sort (7~7,8~8) 1 2 4 5 7 2 3 8 6
merge (7~7,8~8) 1 2 4 5 7 2 3 6 8
merge (5~6,7~8) 1 2 4 5 7 2 3 6 8
merge (0~4,5~8) 1 2 2 3 4 5 6 7 8
阅读(1179) | 评论(0) | 转发(0) |
0

上一篇:整理QT旧的程序

下一篇:关于指针

给主人留下些什么吧!~~