Question
MUST USE C++ AND ONLY USE THE ALGORITHMS LISTED sort_algorithms.t #ifndef SORT_ALGORITHMS_T__ #define SORT_ALGORITHMS_T__ #include #include #include using std::fstream; using std::streampos; #include using std::ios; using
MUST USE C++ AND ONLY USE THE ALGORITHMS LISTED
sort_algorithms.t
#ifndef SORT_ALGORITHMS_T__ #define SORT_ALGORITHMS_T__
#include
#include
template
a = b; b = temp; }
template
// pass has the range 0 to n-2 for ( pass = 0; pass
// j traverses the sublist arrayptr[pass+1] to aarrayptr[n-1] for ( j = pass + 1; j
// when finished, exchange smallest item with arrayptr[pass] swap( arrayptr[pass], arrayptr[smallindex] ); } }
template
// start indices i = 0; j = arraySize - 1; // as long as i
// k traverses the sublist {arrayptr[i+1], ..., arrayptr[j]} for (k = i+1; k
// if smallIndex and i are not the same location, // swap smallest item in the sublist with arrayptr[i] if (smallIndex != i) { swap( arrayptr[i], arrayptr[smallIndex] );
// at index i, arrayptr[i] maybe largest element // if so, swap moves the largest value to index smallIndex if (largeIndex == i) largeIndex = smallIndex; }
// if largeIndex and j are not the same location, // swap largest item in the sublist with arrayptr[j] if (largeIndex != j) { swap( arrayptr[j], arrayptr[largeIndex] ); }
// move i forward and j backward i++; j--; } }
template
// place arrayptr[i] into the sublist // arrayptr[0] ... arrayptr[i-1], 1 0 && target
template
// i is the index of last element in the current sublist i = arraySize - 1;
// continue the process until we make no exchanges or // we have made n-1 passes while ( i > 0 && did_swap ) { // assume no exchange occurs did_swap = false;
// scan the sublist arr[0] to arr[i] for ( j = 0; j
template
for ( i = 1; i = i; j-- ) { if ( cmp( arrayptr[ j ], arrayptr[ j - 1 ] ) ) swap( arrayptr[ j -1 ] , arrayptr[ j ] ); }
}
}
template
template
int mid, i, j, k;
if ( l
sortmerge1( arrayptr, arraySize, l, mid ); sortmerge1( arrayptr, arraySize, mid + 1, r );
T* temp = new T[ arraySize ];
for ( i = mid + 1; i > l; i-- ) temp[ i - 1 ]= arrayptr[ i - 1 ];
for ( j = mid; j
for ( k = l; k
}
delete [] temp; temp = 0; }
template
T* copy = new T[ arraySize ]; int i; for ( i = 0; i
mergesort2( copy, arrayptr, 0, arraySize - 1 );
}
template
if ( l != r ) { int mid = ( l + r )/2; mergesort2( dest, source, l, mid ); mergesort2( dest, source, mid + 1, r ); merge2( source, dest, l, mid, r ); }
}
template
int i = l; int j = mid + 1; int k = l;
while ( ( i mid ) while ( j
#endif
infile1.txt
15437 5579 30403 20723 15051 1275 31856 3192 20446 26400 2346 1804 20246 10454 24880 5574 5060 26748 22640 28586 8296 26589 3486 19567 21101 16655 23428 24710 32276 25244 29849 23127 1711 5856 23764 17614 18191 6834 13762 29462 24127 1863 4311 22948 13427 4946 15362 30840 19515 28528 15491 15007 13308 16836 27649 28413 11169 1246 27607 15945 21134 19938 25264 16985 29141 15846 14419 8864 13997 8859 17344 23029 28960 2608 8059 2453 11011 20083 6184 32108 11051 23354 26968 17808 14558 13313 15523 2319 13192 31956 7927 30186 21167 2672 24623 29281 8745 15781 4327 29553 3725 11774 4751 7324 5607 26532 28095 3304 28848 16512 25290 32042 18173 2208 26774 4996 17910 6620 3499 1
PROBLEM STATEMENT: sort a file with 120 records. However, due to memory restrictions only 20 records may be placed into memory. You are to implement a "quasi" external sort CODE/DIRECTIONS: For the sake of simplicity, and without much loss of generality, we will say for this lab are records are just ints: thus sort a file with 120 ints where only 20 ints maybe placed into memory at any one time general idea: break data into blocks, sort blocks into runs, merge runs more detailed idea: Call inFilel our source file ( the one with the initial 120 records to be sorted.) You will also need an inFile2, and 2 other files outFilel and outFile2. Break the file into blocks of size 20: in this case there will be 6 blocks ( 120/20 ) Sort the blocks by read a block, sort it, store in outFilel read a block, sort it, store in outFile2 read a block, sort it, store in outFilel (in other words, sort a block and alternately place in the files outFilel, outFile2 ) By definition a run is a sorted block Note that each file outFilel and outFile2 will have half of the runs Merge the runs Merge data from outFilel and outFile2 to inFilel and inFile2. Merge the first run on outFilel and the first run on outFile2, and store the result on inFilel: Read two records in main memory, compare, store the smaller on inFilel Read the next record from either outFilel or outFile2 the file that had its record moved/stored to inFilel Similarly merge the second run on outFilel and the second run on outFile2, store the result on inFile2. Merge the third run on outFilel and the third run on outFile2, store the result on inFilel... etc merging each run and storing the result alternatively on inFilel and inFile2 At the end inFilel and inFile2 will contain sorted runs twice the size of the previous runs on outFilel and outFile2 Now merge data from inFilel and inFile2 to outFilel and outFile2. Merge the first run on inFilel and the first run on inFile2, and store the result on outFilel. Merge the second run on inFilel and the second run on inFile2, store the result on outFile2 Etc, merge and store alternatively on inFilel and inFile2. Repeat the process until only one run is obtained. This would be the sorted file Must use above algorithm MUST use algorithms from sort_algorithms.t: the algorithms may not be modified. - but you may assume an overloadedStep by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started