| | |
Merge sort
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Nov 2004
Posts: 20
Reputation:
Solved Threads: 0
Can someone point me in the right direction on implementing a merge sort.
Here is what the main program will look like. THanks.
Here is what the main program will look like. THanks.
C++ Syntax (Toggle Plain Text)
int main(void) { int ar[100]; int i, v, len; for (i=0; i<100; i++) { cout << "enter a number (-1 to quit): "; cin >> v; if (v < 0) break; ar[i] = v; } len = i; cout << "main: before sort:\n"; for (i=0; i<len; i++) { cout << "main: ar[" << i << "] = " << ar[i] << endl; } mergesort ms(ar, len); cout << "main: after sort:\n"; for (i=0; i<len; i++) { cout << "main: ar[" << i << "] = " << ar[i] << endl; }
•
•
Join Date: Nov 2004
Posts: 68
Reputation:
Solved Threads: 1
Regarding the merge sort u shud first specify do u want 2-way merge sort , 3-way merge or n-way.well merge sort algo is as follows:
Function Mergesort (field, lower, upper)
if lower = upper then do nothing (field is sorted)
else
middle = (upper + lower)/2
Mergesort (field, lower, middle)
Mergesort (field, middle+1, upper)
Merge (field, lower, middle, upper)
return field
Function Merge (field, lower, middle, upper)
Let ileft = lower, iright = middle+1, ihelp = lower
While ileft ≤ middle AND iright ≤ upper do
if field[ileft] ≤ field[iright] then
ifield[ihelp] = field[left]
increment ihelp, increment iright
While ileft ≤ middle do
ifield[ihelp] = field[ileft]
increment ihelp, increment ileft
While iright ≤ upper do
ifield[ihelp] = field[iright]
increment ihelp, increment iright
For ihelp from lower to upper do
field[ihelp] = ifield[ihelp]
return field
Thus in plain english do the following steps.
First divide the array into two approximately equal large sub-arrays.
Sort each of these sub-arrays separately.
Merge the resolting sorted sub-arrays into the resulting subarray
Function Mergesort (field, lower, upper)
if lower = upper then do nothing (field is sorted)
else
middle = (upper + lower)/2
Mergesort (field, lower, middle)
Mergesort (field, middle+1, upper)
Merge (field, lower, middle, upper)
return field
Function Merge (field, lower, middle, upper)
Let ileft = lower, iright = middle+1, ihelp = lower
While ileft ≤ middle AND iright ≤ upper do
if field[ileft] ≤ field[iright] then
ifield[ihelp] = field[left]
increment ihelp, increment iright
While ileft ≤ middle do
ifield[ihelp] = field[ileft]
increment ihelp, increment ileft
While iright ≤ upper do
ifield[ihelp] = field[iright]
increment ihelp, increment iright
For ihelp from lower to upper do
field[ihelp] = ifield[ihelp]
return field
Thus in plain english do the following steps.
First divide the array into two approximately equal large sub-arrays.
Sort each of these sub-arrays separately.
Merge the resolting sorted sub-arrays into the resulting subarray
•
•
Join Date: Dec 2004
Posts: 24
Reputation:
Solved Threads: 1
#include <iostream.h>
int mergesort;
int main(void)
{
int ar[100];
int i, v, len;
for (i=0; i<100; i++) {
cout << "enter a number (-1 to quit): ";
cin >> v;
if (v < 0) break;
ar[i] = v;
}
len = i;
cout << "main: before sort:\n";
for (i=0; i<len; i++) {
cout << "main: ar[" << i << "] = " << ar[i] << endl;
}
mergesort;
cout << "main: after sort:\n";
for (i=0; i<len; i++) {
cout << "main: ar[" << i << "] = " << ar[i] << endl;
}
}
int mergesort;
int main(void)
{
int ar[100];
int i, v, len;
for (i=0; i<100; i++) {
cout << "enter a number (-1 to quit): ";
cin >> v;
if (v < 0) break;
ar[i] = v;
}
len = i;
cout << "main: before sort:\n";
for (i=0; i<len; i++) {
cout << "main: ar[" << i << "] = " << ar[i] << endl;
}
mergesort;
cout << "main: after sort:\n";
for (i=0; i<len; i++) {
cout << "main: ar[" << i << "] = " << ar[i] << endl;
}
}
•
•
•
•
Originally Posted by yb1pls
#include <iostream.h>
int mergesort;
int main(void)
{
int ar[100];
int i, v, len;
for (i=0; i<100; i++) {
cout << "enter a number (-1 to quit): ";
cin >> v;
if (v < 0) break;
ar[i] = v;
}
len = i;
cout << "main: before sort:\n";
for (i=0; i<len; i++) {
cout << "main: ar[" << i << "] = " << ar[i] << endl;
}
mergesort;
cout << "main: after sort:\n";
for (i=0; i<len; i++) {
cout << "main: ar[" << i << "] = " << ar[i] << endl;
}
}
Even if you had this magical global integer called mergesort, you still might have to tell it what to sort. Dream on!!
May 'the Google' be with you!
![]() |
Similar Threads
- Merge and sort 2 linked lists (Pascal and Delphi)
- merge sort (C++)
- Merge Sort on a Array-Based List (C++)
- Merge sort not working (C++)
- Merge Sort (C)
- hw assignment help on selection & merge sort (C)
Other Threads in the C++ Forum
- Previous Thread: Help with a triangle shape
- Next Thread: Integer data type
| Thread Tools | Search this Thread |
api application array arrays based beginner binary bitmap bmp c++ c/c++ calculator char char* class classes code coding compile compiler console conversion convert count data database delete deploy developer dll dynamiccharacterarray email encryption error file format forms fstream function functions game generator getline givemetehcodez graph homeworkhelp iamthwee ifstream image input int java lib list loop looping loops map math matrix memory multiple newbie news node number numbertoword output pointer problem program programming project python random read recursion recursive reference rpg simple sorting string strings temperature template text tree url variable vector video visual visualstudio win32 windows winsock word wordfrequency wxwidgets






