//DISPLAY 7.12 Sorting an Array //Tests the procedure sort. #include void fillArray(int a[], int size, int& numberUsed); //Precondition: size is the declared size of the array a. //Postcondition: numberUsed is the number of values stored in a. //a[0] through a[numberUsed - 1] have been filled with //nonnegative integers read from the keyboard. void sort(int a[], int numberUsed); //Precondition: numberUsed <= declared size of the array a. //The array elements a[0] through a[numberUsed - 1] have values. //Postcondition: The values of a[0] through a[numberUsed - 1] have //been rearranged so that a[0] <= a[1] <= ... <= a[numberUsed - 1]. void sortDescend(int a[], int numberUsed); void swapValues(int& v1, int& v2); //Interchanges the values of v1 and v2. int indexOfLargest(const int a[], int startIndex, int numberUsed); int indexOfSmallest(const int a[], int startIndex, int numberUsed); //Precondition: 0 <= startIndex < numberUsed. Referenced array elements have //values. //Returns the index i such that a[i] is the smallest of the values //a[startIndex], a[startIndex + 1], ..., a[numberUsed - 1]. int main( ) { using namespace std; cout << "This program sorts numbers from lowest to highest.\n"; int sampleArray[10], numberUsed; fillArray(sampleArray, 10, numberUsed); //sort(sampleArray, numberUsed); sortDescend(sampleArray, numberUsed); cout << "In sorted order the numbers are:\n"; for (int index = 0; index < numberUsed; index++) cout << sampleArray[index] << " "; cout << endl; return 0; } //Uses iostream: void fillArray(int a[], int size, int& numberUsed) { using namespace std; cout << "Enter up to " << size << " nonnegative whole numbers.\n" << "Mark the end of the list with a negative number.\n"; int next, index = 0; cin >> next; while ((next >= 0) && (index < size)) { a[index] = next; index++; cin >> next; }numberUsed = index; }void sort(int a[], int numberUsed) { int indexOfNextSmallest; for (int index = 0; index < numberUsed - 1; index++) {//Place the correct value in a[index]: indexOfNextSmallest = indexOfSmallest(a, index, numberUsed); swapValues(a[index], a[indexOfNextSmallest]); //a[0] <= a[1] <=...<= a[index] are the smallest of the original array //elements. The rest of the elements are in the remaining positions. } } void sortDescend(int a[], int numberUsed) { int indexOfNextLargest; for (int index = 0; index < numberUsed - 1; index++) {//Place the correct value in a[index]: indexOfNextLargest = indexOfLargest(a, index, numberUsed); swapValues(a[index], a[indexOfNextLargest]); //a[0] <= a[1] <=...<= a[index] are the smallest of the original array //elements. The rest of the elements are in the remaining positions. } }void swapValues(int& v1, int& v2) { int temp; temp = v1; v1 = v2; v2 = temp; } int indexOfLargest(const int a[], int startIndex, int numberUsed) { int max = a[startIndex], indexOfMax = startIndex; for (int index = startIndex + 1; index < numberUsed; index++) if (a[index] > max) { max = a[index]; indexOfMax = index; //min is the smallest of a[startIndex] through a[index] } return indexOfMax; }int indexOfSmallest(const int a[], int startIndex, int numberUsed) { int min = a[startIndex], indexOfMin = startIndex; for (int index = startIndex + 1; index < numberUsed; index++) if (a[index] < min) { min = a[index]; indexOfMin = index; //min is the smallest of a[startIndex] through a[index] } return indexOfMin; } Modify example 7.12 so that instead of sorting in ascending order, sort the same list of numbers in descending order. Do not modify any of the existing sorting functions. Instead, add additional functions as necessary. For example create a function called “sortDescend” We see the following dialog when run:This program sorts numbers from highest to lowest.Enter up to 10 nonnegative whole numbers.Mark the end of the list with a negative number.80 30 50 70 60 90 20 30 40 -1In sorted order the numbers are:90 80 70 60 50 40 30 30
//DISPLAY 7.12 Sorting an Array
//Tests the procedure sort.
#include <iostream>
void fillArray(int a[], int size, int& numberUsed);
//Precondition: size is the declared size of the array a.
//Postcondition: numberUsed is the number of values stored in a.
//a[0] through a[numberUsed - 1] have been filled with
//nonnegative integers read from the keyboard.
void sort(int a[], int numberUsed);
//Precondition: numberUsed <= declared size of the array a.
//The array elements a[0] through a[numberUsed - 1] have values.
//Postcondition: The values of a[0] through a[numberUsed - 1] have
//been rearranged so that a[0] <= a[1] <= ... <= a[numberUsed - 1].
void sortDescend(int a[], int numberUsed);
void swapValues(int& v1, int& v2);
//Interchanges the values of v1 and v2.
int indexOfLargest(const int a[], int startIndex, int numberUsed);
int indexOfSmallest(const int a[], int startIndex, int numberUsed);
//Precondition: 0 <= startIndex < numberUsed. Referenced array elements have
//values.
//Returns the index i such that a[i] is the smallest of the values
//a[startIndex], a[startIndex + 1], ..., a[numberUsed - 1].
int main( )
{
using namespace std;
cout << "This program sorts numbers from lowest to highest.\n";
int sampleArray[10], numberUsed;
fillArray(sampleArray, 10, numberUsed);
//sort(sampleArray, numberUsed);
sortDescend(sampleArray, numberUsed);
cout << "In sorted order the numbers are:\n";
for (int index = 0; index < numberUsed; index++)
cout << sampleArray[index] << " ";
cout << endl;
return 0;
}
//Uses iostream:
void fillArray(int a[], int size, int& numberUsed)
{
using namespace std;
cout << "Enter up to " << size << " nonnegative whole numbers.\n"
<< "Mark the end of the list with a negative number.\n";
int next, index = 0;
cin >> next;
while ((next >= 0) && (index < size))
{
a[index] = next;
index++;
cin >> next;
}numberUsed = index;
}void sort(int a[], int numberUsed)
{ int indexOfNextSmallest;
for (int index = 0; index < numberUsed - 1; index++)
{//Place the correct value in a[index]:
indexOfNextSmallest =
indexOfSmallest(a, index, numberUsed);
swapValues(a[index], a[indexOfNextSmallest]);
//a[0] <= a[1] <=...<= a[index] are the smallest of the original array
//elements. The rest of the elements are in the remaining positions.
}
}
void sortDescend(int a[], int numberUsed)
{
int indexOfNextLargest;
for (int index = 0; index < numberUsed - 1; index++)
{//Place the correct value in a[index]:
indexOfNextLargest =
indexOfLargest(a, index, numberUsed);
swapValues(a[index], a[indexOfNextLargest]);
//a[0] <= a[1] <=...<= a[index] are the smallest of the original array
//elements. The rest of the elements are in the remaining positions.
}
}void swapValues(int& v1, int& v2)
{
int temp;
temp = v1;
v1 = v2;
v2 = temp;
}
int indexOfLargest(const int a[], int startIndex, int numberUsed)
{
int max = a[startIndex],
indexOfMax = startIndex;
for (int index = startIndex + 1; index < numberUsed; index++)
if (a[index] > max)
{
max = a[index];
indexOfMax = index;
//min is the smallest of a[startIndex] through a[index]
}
return indexOfMax;
}int indexOfSmallest(const int a[], int startIndex, int numberUsed)
{ int min = a[startIndex],
indexOfMin = startIndex;
for (int index = startIndex + 1; index < numberUsed; index++)
if (a[index] < min)
{
min = a[index];
indexOfMin = index;
//min is the smallest of a[startIndex] through a[index]
} return indexOfMin;
}
Modify example 7.12 so that instead of sorting in ascending order, sort the same list of numbers in descending order. Do not modify any of the existing sorting functions. Instead, add additional functions as necessary. For example create a function called “sortDescend” We see the following dialog when run:This program sorts numbers from highest to lowest.Enter up to 10 nonnegative whole numbers.Mark the end of the list with a negative number.80 30 50 70 60 90 20 30 40 -1In sorted order the numbers are:90 80 70 60 50 40 30 30 20
Trending now
This is a popular solution!
Step by step
Solved in 4 steps with 4 images