Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458595
  • 博文数量: 118
  • 博客积分: 4015
  • 博客等级: 上校
  • 技术积分: 1233
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-24 22:11
文章分类

全部博文(118)

文章存档

2013年(5)

2011年(61)

2010年(52)

分类: C/C++

2011-12-07 15:30:30


The Content Goes here
  1 #include
  2 using namespace std;
  3 int STRCOPY(char *STR1, char * STR2);
  4 int SHOWSTRS(char (*pSTR)[10],int L);
  5 int STRCMP(char * STR1, char * STR2, int L);
  6 int MAXSTR(char *STR, int L);
  7 int Merge(char (*pSTR)[10],int l, int m, int h);
  8 int StringSort(char (*pSTR)[10], int l,int h);
  9 int main(){
 10   char pSTR[][10] = {"AAAAA",
 11                       "CCCCD",
 12                       "CCCCC",
 13                       "BBBBB",
 14                       "DDDDD",
 15                       "EEEEE"};
 16   SHOWSTRS(pSTR,6);
 17   StringSort(pSTR,0,5);
 18   cout<<"Final Result:\n";
 19   SHOWSTRS(pSTR,6);
 20   return 0;
 21 }
 22 int SHOWSTRS(char (*pSTR)[10],int L){
 23   for(int i = 0; i < L; i ++){
 24     cout< 25   }
 26 }
 27 int StringSort(char (*pSTR)[10], int l,int h){
 28   int M = (l + h) / 2;
 29   if(M == l){
 30     Merge(pSTR,l,M,h);
 31     return 0;
 32   }
 33   StringSort(pSTR,l,M);
 34   StringSort(pSTR,M + 1,h);
 35   Merge(pSTR,l,M,h);
 36   return 0;
 37 }
 38 int Merge(char (*pSTR)[10],int l, int m, int h){
 39   int l1 = m - l + 1;
 40   int l2 = h - m;
 41   const int STRLEN = 10;
 42   char (*pSL)[STRLEN] = new char[l1 + 1][STRLEN];//10 is the max length of every str
 43
 44   char (*pSR)[STRLEN] = new char[l2 + 1][STRLEN];
 45   char INF[STRLEN] ;
 46   MAXSTR(INF,STRLEN);
 47   for(int i = 0; i < l1; i++){
 48     STRCOPY(pSL[i], pSTR[l + i]);
 49   }
 50   STRCOPY(pSL[l1],INF);
 51   for(int i = 0; i < l2; i ++){
 52     STRCOPY(pSR[i],pSTR[i + m + 1]);
 53   }
 54   STRCOPY(pSR[l2],INF);
 55   int t1 = 0;
 56   int t2 = 0;
 57   for(int i = l; i <= h; i ++){
 58     if(STRCMP(pSL[t1],pSR[t2],STRLEN) < 0){
 59       STRCOPY(pSTR[i],pSL[t1]);
 60       t1 ++;
 61     }else{
 62       STRCOPY(pSTR[i],pSR[t2]);
 63       t2 ++;
 64     }
 65   }
 66   cout<<"Afer Merge:\n";
 67   SHOWSTRS(pSTR, h - l + 1);
 68
 69   return 0;
 70 }
 71 int MAXSTR(char *STR, int L){
 72   for(int i = 0; i < L; i++){
 73     STR[i] = 127;
 74   }
 75   STR[L - 1] = '\0';
 76   return 0;
 77 }
 78 int STRCMP(char * STR1, char * STR2, int L){
 79   for(int i = 0; i < L ; i++){
 80     if(STR1[i] < STR2[i]){
 81       return -1;
 82     }
 83     if(STR1[i] > STR2[i]){
 84       return 1;
 85     }
 86   }
 87   return 0;
 88 }
 89 int STRCOPY(char *STR1, char * STR2){
 90   do{
 91     *STR1 = *STR2;
 92     STR1 ++;
 93     STR2 ++;
 94   }while(*STR2 != '\0');
 95   return 0;
 96 }

阅读(1826) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~