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<
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 }