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

数据结构

开发平台:

C/C++

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