431,780 Members | 1,549 Online
Need help? Post your question and get tips & solutions from a community of 431,780 IT Pros & Developers. It's quick & easy.

# Merge Sort

 100+ P: 278 Hello everyone, I'm having some trouble with the code for merge sort. I get what is it but the code doesn't seem to work. Here is my code: Expand|Select|Wrap|Line Numbers ////.h   #include  #include  using namespace std;     string merge(string,string); string mergeSort(string); string rest(int,int,string);   string rest(int from,int to,string phrase){     string temp;       for(int i=from;i<=to;i++){         temp[i-1]=phrase[i];     }     return temp; } string merge(string left,string right){     string result; * * while (left.length() > 0 || right.length() > 0){ * * * * if (left.length() > 0 && right.length() > 0){             if (left[0] <= right[0]){ * * * * * * * * result+=left[0]; * * * * * * * * left= rest(1,left.length(),left);             }             if(left[0]>right[0])             * * {                 result+=right[0];                 right= rest(1,right.length(),right);             }                 if (left.length() > 0){                     result+= left[0];                     left= rest(1,left.length(),left);                 }                 if (right.length() > 0){                   * * result+=right[0];                     right= rest(1,right.length(),right);                 }             }         }     return result;     } string mergeSort(string a){     if(a.length()<=1)         return a;       string left,right,result;     int middle=(a.length())/2;       for(int i=0;i=middle)             right+=a[i];       }     left = mergeSort(left); * * right = mergeSort(right); * * result = merge(left, right); * * return result+left; }         ////.cpp   #include "mergeSort.h" using namespace std;   int main () { * * string a,b;     int again=1;     while(again==1){       * * cout<<"Enter string to sort: ";     * * cin>>a;                 cout<<"Before the sort: "<>again;     }   * * return 0; }   Any ideas? Oct 28 '11 #1

Easy fix-

Expand|Select|Wrap|Line Numbers
1.
2. ////.h
3.
4. #include <iostream>
5. #include <string>
6. using namespace std;
7.
8. char *mergeSort(char letters[], char temp[], int array_size);
9. char *mSort(char letters[], char temp[], int left, int right);
10. char *merge(char letters[], char temp[], int left, int mid, int right);
11.
12. char *mergeSort(char letters[], char temp[], int array_size)
13. {
14.     return mSort( letters, temp, 0, array_size - 1);
15. }
16.
17.
18. char *mSort(char letters[], char temp[], int left, int right)
19. {
20.     int mid;
21.
22.     if (right > left)
23.     {
24.         mid = (right + left) / 2;
25.         mSort( letters, temp, left, mid);
26.         mSort( letters, temp, (mid+1), right);
27.
28.         merge( letters, temp, left, (mid+1), right);
29.     }
30.
31.     return letters;
32. }
33.
34. char *merge(char letters[], char temp[], int left, int mid, int right)
35. {
36.     int i, leftEnd, elements, tmpPos;
37.
38.     leftEnd = (mid - 1);
39.     tmpPos = left;
40.     elements = (right - left + 1);
41.
42.     while ((left <= leftEnd) && (mid <= right))
43.     {
44.         if ( letters[left] <=  letters[mid])
45.         {
46.             temp[tmpPos] =  letters[left];
47.             tmpPos += 1;
48.             left += 1;
49.         }
50.         else
51.         {
52.             temp[tmpPos] =  letters[mid];
53.             tmpPos += 1;
54.             mid += 1;
55.         }
56.     }
57.
58.     while (left <= leftEnd)
59.     {
60.         temp[tmpPos] =  letters[left];
61.         left += 1;
62.         tmpPos += 1;
63.     }
64.     while (mid <= right)
65.     {
66.         temp[tmpPos] =  letters[mid];
67.         mid += 1;
68.         tmpPos += 1;
69.     }
70.
71.     for (i=0; i < elements; i++)
72.     {
73.         letters[right] = temp[right];
74.         right -= 1;
75.     }
76.
77.     return temp;
78. }
79.
80.
81. ////.cpp
82.
83.
84. #include "mergeSort.h"
85.
86. int main()
87. {
88.     int max,again=1;
89.
90.     while(again==1){
91.     cout<<"Word size: ";
92.     cin>>max;
93.
94.     char arrayOne[max];
95.     char arrayTwo[max];
96.         string result;
97.
98.     cout<<"Enter word to sort: ";
99.
100.     //Enter character array
101.     for(int i=0;i<max;i++){
102.         cout<<"Letter"<<i+1<<"/"<<max<<": ";
103.         cin>>arrayOne[i];
104.     }
105.
106.     //Before the sort
107.     cout<<"Before the sort: ";
108.     for(int i=0;i<max;i++)
109.         cout<<arrayOne[i]<<" ";
110.     cout<<endl;
111.
112.     //Sort
113.     result=mergeSort(arrayOne, arrayTwo, max);
114.
115.     //After the sort
116.
117.     cout<<"After the sort: ";
118.     for(int i=0;i<max;i++)
119.         cout<<result[i]<<" ";
120.     cout<<endl;
121.
122.         cout<<"1-Again  2-Close: ";
123.         cin>>again;
124.     }
125.
126.     cout<<endl;
127.     return 0;
128. }
129.
Merge sort can not be done with strings, you need a list of either characters or arrays. Despite strings being character arrays, it treats it differently.