The exercise will be marked out of 10, and is worth 5% of your total grade.
Late submissions will be penalized 2.5 marks per day late or part thereof.
Exercise details:
For lab exercise 5 you will be implementing a recursive sorting function, quicksort, the partition function it utilizes, and a supporting swap function.
Two files are provided, sort.h and labex5.C, containing the code to drive the sorting application and the prototypes for quicksort, partition, and swap.
You will create sort.C, containing the implementation of the functions prototyped in sort.h.
Nothing should be altered in sort.h or labex5.C, and you must follow the quicksort and partition algorithms as closely as possible:
| Algorithms to use | |
Quicksort
if upper > lower
call partition, store returned midpt
call recursively on lower..midpt-1
call recursively on midpt+1..upper
|
Partition
mid = lower
if upper <= lower
return lower
otherwise
pivot = arr[lower]
mid = lower
swap arr[lower] with arr[upper]
for pos = lower .. upper-1
if arr[pos] < pivot
swap arr[pos] with arr[mid]
and increment mid
swap arr[mid] with arr[upper]
return mid
|
The code is available here labex5.C , sort.h
// sort.h #ifndef SORT_H #define SORT_H // recursively sort the array segment void quicksort(float arr[], int lower, int upper); // divide the array segment into small/large values, and // return the array position marking the changeover point int partition(float arr[], int lower, int upper); // exchange the values in two floats void swap(float &a, float &b); #endif |
// labex5.C
#include "sort.h"
#include <iostream>
using namespace std;
// get the user to supply a collection of floats,
// store them in an array
void getValues(float* &arr, int &size);
// display the array contents, one number per line
void printArr(float* arr, int size);
int main()
{
float *data;
int size;
getValues(data, size);
if (data != NULL) {
cout << "---Original data---\n\n";
printArr(data, size);
cout << "\n---Sorting...\n";
quicksort(data, 0, size-1);
cout << "\n---Sorted data---\n";
printArr(data, size);
delete [] data;
} else {
cout << "Unable to allocate data storage" << endl;
cout << "Shutting down" << endl;
}
return 0;
}
// get the user to supply a collection of floats,
// store them in an array
void getValues(float* &arr, int &size)
{
cout << "Specify the number of values to sort: ";
cin >> size;
arr = new float[size];
if (arr != NULL) {
cout << "Enter the " << size << " numeric values:\n";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
}
}
// display the array contents, one number per line
void printArr(float* arr, int size)
{
if (arr != NULL) {
for (int i = 0; i < size; i++) {
cout << arr[i] << endl;
}
}
}
|
Submission mechanism
You will be submitting your sort.C file (correct spelling and capitalization is essential for the submission to work correctly).
To submit the assignment, cd to the directory that contains your sort.C file and type the following command:
/home/faculty/wesselsd/bin/submit 161 sort.C
Marking guidelines:
Marks will be based on:
Code standards:
The submission must follow the code standards for labex4,