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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程序实例: 10_6.c                      */
  3. /*    快速排序法                            */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. #define MAX  20                   /* 最大字符串长度       */
  7. /* ---------------------------------------- */
  8. /*  快速排序法的递归处理                    */
  9. /* ---------------------------------------- */
  10. void q_sort(char *string,int left,int right)
  11. {
  12.    char partition;                /* 分割元素           */
  13.    char temp;
  14.    int i,j,k;
  15.    if ( left < right )            /* 是否继续分割       */
  16.    {
  17.       i = left;                   /* 分割的最左         */
  18.       j = right + 1;              /* 分割的最右         */
  19.       partition = string[left];   /* 取第一个元素       */
  20.       do {
  21.          do {                     /* 从左往右找         */
  22.             i++;
  23.          } while( string[i] < partition );
  24.          do {                     /* 从右往左找         */
  25.             j--;
  26.          } while( string[j] > partition );
  27.          if ( i < j )
  28.          {
  29.             temp = string[i];     /* 交换数据           */
  30.             string[i] = string[j];
  31.             string[j] = temp;
  32.          }
  33.       } while( i < j );
  34.       temp= string[left];         /* 交换数据           */
  35.       string[left] = string[j];
  36.       string[j] = temp;
  37.       printf("输出结果: ");
  38.       for ( k = left; k <= right; k++)  /* 输出处理字符串 */
  39.          printf("%c",string[k]);
  40.       printf("n");               /* 换行               */
  41.       q_sort(string,left,j-1);    /* 快速排序递归调用   */
  42.       q_sort(string,j+1,right);   /* 快速排序递归调用   */
  43.    }
  44. }
  45. /* ---------------------------------------- */
  46. /*  快速排序法                              */
  47. /* ---------------------------------------- */
  48. void quick(char *string,int n)
  49. {
  50.    q_sort(string,0,n-1);
  51. }
  52. /* ---------------------------------------- */
  53. /*  主程序: 输入字符串后将字符串排序           */
  54. /* ---------------------------------------- */
  55. void main()
  56. {
  57.    char string[MAX];              /* 字符串阵列           */
  58.    int count;                     /* 字符串长度           */
  59.    printf("输入要排序的字符串 ==> ");
  60.    gets(string);                  /* 读取字符串           */
  61.    count = strlen(string);        /* 计算字符串长度       */
  62.    quick(string,count);           /* 快速排序法         */
  63.    /* 输出排序后字符串 */
  64.    printf("n输出排序结果: [%s]n",string);
  65. }