// SHELSORT.CPP. This implements the Shell sort for parallel arrays // containing CSC course coes and the number of students // in each course. // For: CSC250 // By: DR. Menuge. #include using namespace std; void Load_Arrays ( int[], int[], int &); void Shell_Sort_Lists ( int[], int[], int ); void Print_Lists ( int[], int[], int ); const int MaxElement = 15; int main () { int CourseNumberList [MaxElement]; int StudentNumberList [MaxElement]; int ListLength; Load_Arrays (CourseNumberList, StudentNumberList, ListLength); Print_Lists (CourseNumberList, StudentNumberList, ListLength); Shell_Sort_Lists (CourseNumberList, StudentNumberList, ListLength); Print_Lists (CourseNumberList, StudentNumberList, ListLength); return 0; } // end main void Load_Arrays ( int CourseNumberList[], int StudentNumberList [ ], int &listsize) { int I = 0, CourseNum = 0; // sentinel variable // priming read: cout << "Enter the CSC course number e.g. 150 (0 to quit) " << endl; cin >> CourseNum; while ( (CourseNum != 0) && (I < MaxElement)) { CourseNumberList [I] = CourseNum; cout << "Enter the number of students in the course " << endl; cin >> StudentNumberList[I]; I++; // read next: cout << "Enter the CSC course number e.g. 150 (0 to quit) " << endl; cin >> CourseNum; } // end while listsize = I; } // end load arrays void Shell_Sort_Lists ( int CourseNumberList[], int StudentNumberList [ ], int listsize) { bool Swap; int Gap, Limit, LastElement, I, TempCourse, TempStudents; LastElement = listsize-1; Gap = LastElement / 2; while (Gap > 0) { Swap = true; while (Swap) { //do passes at this size gap until a pass with //no swaps. Swap = false; //stays false unless swap occurs Limit = LastElement - Gap; for (I = 0; I <= Limit; I++) if (CourseNumberList[I] > CourseNumberList[I + Gap]) { // swap TempCourse = CourseNumberList [I]; TempStudents = StudentNumberList [I]; CourseNumberList [I] = CourseNumberList [I + Gap]; StudentNumberList [I] = StudentNumberList [I + Gap]; CourseNumberList [I + Gap] = TempCourse; StudentNumberList [I + Gap] = TempStudents; Swap = true; } // end swap } // end inner while Gap = Gap / 2; // halve gap } // end outer while } // end Shell Sort lists void Print_Lists ( int CourseNumberList[], int StudentNumberList [ ], int listsize) { cout << endl << "The lists are as follows: " << endl; cout << "Course: Students:" << endl << endl; for (int I= 0; I < listsize; I++) cout << CourseNumberList[I] << "\t" << StudentNumberList[I] << endl; } // end Print Lists.