设为首页 加入收藏

TOP

C语言排序算法(十)
2013-11-20 14:18:24 来源: 作者: 【 】 浏览:965
Tags:语言 排序 算法

 

  (5)"shell法"

  shell法是一个叫 shell 的美国人与1969年发明的。它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序。下面让我们来分析其代码:

  void shell(int *a,int n)

  {

  int i,j,k,x;

  k=n/2; /*间距值*/

  while(k>=1) {

  for(i=k;i<n;i++) {

  x=a[i];

  j=i-k;

  while(j>=0&&x<a[j]) {

  a[j+k]=a[j];

  j-=k;

  }

  a[j+k]=x;

  }

  k/=2; /*缩小间距值*/

  }

  }

  上面我们已经对几种排序法作了介绍,现在让我们写个主函数检验一下。

  #include<stdio.h>

  /*别偷懒,下面的"…"代表函数体,自己加上去哦!*/

  void bubble(int *a,int n)

  {

  …

  }

  void choise(int *a,int n)

  {

  …

  }

  void quick(int *a,int i,int j)

  {

  …

  }

  void insert(int *a,int n)

  {

  …

  }

  void shell(int *a,int n)

  {

  …

  }

  /*为了打印方便,我们写一个print吧。*/[code]

  void print(int *a,int n)

  {

  int i;

  for(i=0;i<n;i++)

  printf("%5d",a[i]);

  printf("\n");

  }

  main()

  { /*为了公平,我们给每个函数定义一个相同数组*/

  int a1[]={13,0,5,8,1,7,21,50,9,2};

  int a2[]={13,0,5,8,1,7,21,50,9,2};

  int a3[]={13,0,5,8,1,7,21,50,9,2};

  int a4[]={13,0,5,8,1,7,21,50,9,2};

  int a5[]={13,0,5,8,1,7,21,50,9,2};

  printf("the original list:");

  print(a1,10);

  printf("according to bubble:");

  bubble(a1,10);

  print(a1,10);

  printf("according to choise:");

  choise(a2,10);

  print(a2,10);

  printf("according to quick:");

  quick(a3,0,9);

  print(a3,10);

  printf("according to insert:");

  insert(a4,10);

  print(a4,10);

  printf("according to shell:");

  shell(a5,10);

  print(a5,10);

  }

      

首页 上一页 7 8 9 10 11 12 下一页 尾页 10/12/12
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇几个C库函数的源码 下一篇用C语言获取任意文件的长度

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: