10_5B.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:2k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程序实例: 10_5b.c                     */
  3. /*    希尔排序法(自定增量)                  */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. #define MAX  20                   /* 最大字符串长度       */
  7. /* ---------------------------------------- */
  8. /*  希尔排序法                              */
  9. /* ---------------------------------------- */
  10. void shell(char *string,int count)
  11. {
  12.    int offset_a[6] = { 11, 7, 5, 3,   /* 设定处理增量   */
  13.                         2, 1 };
  14.    int pos;                       /* 处理位置           */
  15.    int offset;                    /* 位移量             */
  16.    int i,j;
  17.    char temp;
  18.    for ( i = 0; i < 6 ; i++ )     /* 处理六次增量       */
  19.    {
  20.       offset = offset_a[i];       /* 建立位移量         */
  21.       for ( j = offset; j < count; j++ )  /* 交换循环   */
  22.       {
  23.          temp = string[j];        /* 保留其值           */
  24.          pos = j - offset;        /* 计算处理位置       */
  25.          while ( temp < string[pos] &&    /* 比较       */
  26.                  pos >= 0 && j <= count)
  27.          {
  28.             /* 交换其值 */
  29.             string[pos+offset] = string[pos];
  30.             pos = pos - offset;   /* 下一个处理位置     */
  31.          }
  32.          string[pos+offset] = temp;   /* 与最后元素交换 */
  33.       }
  34.       printf("输出结果: [%s]n",string); /*输出处理字符串 */
  35.    }
  36. }
  37. /* ---------------------------------------- */
  38. /*  主程序: 输入字符串后将字符串排序           */
  39. /* ---------------------------------------- */
  40. void main()
  41. {
  42.    char string[MAX];              /* 字符串数组           */
  43.    int count;                     /* 字符串长度           */
  44.    printf("输入要排序的字符串 ==> ");
  45.    gets(string);                  /* 读取字符串           */
  46.    count = strlen(string);        /* 计算字符串长度       */
  47.    shell(string,count);           /* 希尔排序法         */
  48.    /* 输出排序后字符串 */
  49.    printf("n输出排序结果: [%s]n",string);
  50. }