| | |
Help with a 5-way balanced sort merge
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Jan 2005
Posts: 31
Reputation:
Solved Threads: 0
I am doing a 5-way balanced sort merge. I have 1, 000, 000 records and a toal of 10 temp files to work with (5 for input and 5 for output). After phase 1, the temp files F0 thru F4 are populated with clumps of sorted records. The clump size is 1000. I am using an array of files to work with, instead of hard coding 10 temp files. My phase 2 is not working correctly. What I am trying to do is read 1 record from each of the 5 temp files and write the smallest one to the corresponding output file. I am having trouble with what controls the loop to do this phase as well. The total number of runs 5.
Here is the main part of my code:
When I run it, I get all passes complete at the same time. It should tell me when one pass is complete. It should take 4 passes. Like it is, it leaves out some numbers. I get like 95,000 in 3 files but 90,000 in the other 2. This problem has just kicked my butt! Thanks for any input.
<< moderator edit: added [code][/code] tags >>
Here is the main part of my code:
C++ Syntax (Toggle Plain Text)
int main() { cout << '\n'; cout << "**********Phase 2 Started**********" << '\n'; cout << '\n'; Merges = ceil ((NumOfColumns / NumOfFiles)); ClumpSize = ClumpSize * NumOfFiles; F[Counter] >> Number1; F[Counter+1] >> Number2; F[Counter+2] >> Number3; F[Counter+3] >> Number4; F[Counter+4] >> Number5; if (Counter == 5) { Counter = 0; } while (PassCount < NomOfPasses) { for (i = 0; i < Merges; i++) { for (j = 0; j < NumOfFiles; j++) { for (k = 0; k < ClumpSize; k++) { if ((Number1 < Number2) && (Number1 < Number3) && (Number1 < Number4) && (Number1 < Number5)) { X.WhichFile = 1; X.Priority = -1; X.Number = Number1; P.Insert(X); F[Counter] >> Number1; if (F[Counter].eof()) { break; } } else if ((Number2 < Number1) && (Number2 < Number3) && (Number2 < Number4) && (Number2 < Number5)) { X.WhichFile = 2; X.Priority = -2; X.Number = Number2; P.Insert(X); F[Counter+1] >> Number2; if (F[Counter+1].eof()) { break; } } else if ((Number3 < Number1) && (Number3 < Number2) && (Number3 < Number4) && (Number3 < Number5)) { X.WhichFile = 3; X.Priority = -3; X.Number = Number3; P.Insert(X); F[Counter+2] >> Number3; if (F[Counter+2].eof()) { break; } } else if ((Number4 < Number1) && (Number4 < Number2) && (Number4 < Number3) && (Number4 < Number5)) { X.WhichFile = 4; X.Priority = -4; X.Number = Number4; P.Insert(X); F[Counter+3] >> Number4; if (F[Counter+3].eof()) { break; } } else if ((Number5 < Number1) && (Number5 < Number2) && (Number5 < Number3) && (Number5 < Number4)) { X.WhichFile = 5; X.Priority = -5; X.Number = Number5; P.Insert(X); F[Counter+4] >> Number5; if (F[Counter+4].eof()) { break; } } P.Remove(X); F[OCounter] << setprecision(15) << X.Number << '\n'; } // end for OCounter ++; if (OCounter == 10) { OCounter = 5; } // end if } // end for NewNumOfFiles = OCounter - NumOfFiles; ClumpSize = ClumpSize * NewNumOfFiles; CloseTheFiles (F, FileName, InputFileName, InputFile); if (OCounter == 5) { OpenTempFilesAsOutput(F, FileName); OCounter = 0; Counter = 5; } else if (OCounter == 0) { OpenTempFilesAsInput(F, FileName); OCounter = 5; Counter = 0; } PassCount++; cout << "Pass " << PassCount << " completed." << '\n'; } // end while return 0; } // end function main
<< moderator edit: added [code][/code] tags >>
![]() |
Similar Threads
- balanced k-way sort-merge (C)
- hw assignment help on selection & merge sort (C)
- Can someone please help me out!! (Java)
- Can anyone tell me how to print to alternate files? (C)
- Working with array of files (C++)
- Merge sort (C++)
Other Threads in the C++ Forum
- Previous Thread: Help With A Timer And Stopping It.
- Next Thread: Recursion: when do you use it?
| Thread Tools | Search this Thread |
api array based binary c++ c/c++ calculator char char* class classes code coding compile console conversion count database delete deploy desktop developer directshow dll download dynamic dynamiccharacterarray email encryption error file forms fstream function functions game givemetehcodez google graph gui homeworkhelp iamthwee ifstream input int integer java lib linkedlist linker linux list loop looping loops map math matrix memory multiple news number numbertoword output parameter pointer problem program programming project python random read recursion recursive reference return rpg sorting string strings struct temperature template templates test text text-file tree unix url variable vector video visualstudio win32 windows winsock wordfrequency wxwidgets





