1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
iren2701 [21]
3 years ago
13

Implement a quick sort algorithm that will accept an integer array of size n and in random order. Develop or research three diff

erent approaches as how you can pick the pivot. Write the code so the quick sort can choose among the above three different ways of picking the pivot. Run the algorithm for different sets of random data and make sure that for each set of data, you run the algorithm with all three options for the pivot selection. Record the number of key operations for each case. Report the numbers in a way that will allow you to draw a conclusion about which pivot selection approach was more efficient and how much variations you see between the different runs.
Engineering
1 answer:
Nostrana [21]3 years ago
8 0

Answer:

#include <cstdlib>  

#include <iostream>  

#include <array>  

using namespace std;  

const string APP_NAME = "Quick Sort Algorithm";  

const array<string, 3> MENU_OPTIONS = {  

"Simulate with Random data",  

"Enter data",  

"Exit program"  

};  

void printMenuOptions() {  

cout << endl << "---------------------------" << endl;  

cout << APP_NAME << endl;  

cout << "---------------------------" << endl;  

for (int i=0; i<MENU_OPTIONS.size(); i++) {  

cout << i+1 << ". " << MENU_OPTIONS[i] << endl;  

}  

cout << endl << "Select an option: ";  

}  

int getRandomInt(int min, int max) {  

return min + (static_cast<int>(rand() % (max - min + 1)));  

}  

bool inArray(int value, int* arr, int size) {  

bool found = false;  

for (int i=0; i<size; i++) {  

if (arr[i] == value) {  

found = true;  

}  

}  

return found;  

}  

void generateRandomArrays(int size, int* arr0, int* arr1, int* arr2, int* arr3) {  

int value;  

bool ok = false;  

for (int i=0; i<size; i++) {  

while (!ok) {  

value = getRandomInt(1, size*10);  

if (!inArray(value, arr0, size)) {  

arr0[i] = value;  

arr1[i] = value;  

arr2[i] = value;  

arr3[i] = value;  

ok = true;  

}  

}  

ok = false;  

}  

}  

void print(int* data, int size) {  

for (int i=0; i<size; i++) {  

cout << data[i] << " ";  

}  

}  

int getPivot(int first, int last, int approach) {  

int pivot;  

switch (approach) {  

case 2:  

pivot = first;  

break;  

case 3:  

pivot = last;  

break;  

case 1:  

default:  

pivot = (first + last) / 2;  

}  

return pivot;  

}  

void swap(int* data, int i, int j) {  

int temp = data[i];  

data[i] = data[j];  

data[j] = temp;  

}  

int quickSort(int* data, int first, int last, int approach) {  

int ops = 0;  

int i = first;  

int j = last;  

int pivot = getPivot(i, j, approach);  

while (i <= j) {  

while (data[i] < data[pivot]) {  

i++;  

}  

while (data[j] > data[pivot]) {  

j--;  

}  

if (i <= j) {  

ops++;  

swap(data, i, j);  

i++;  

j--;  

}  

}  

if (j > first) {  

ops += quickSort(data, first, j, approach);  

}  

if (i < last) {  

ops += quickSort(data, i, last, approach);  

}  

return ops;  

}  

void simulate(int size, bool display) {  

int* data0 = new int[size];  

int* data1 = new int[size];  

int* data2 = new int[size];  

int* data3 = new int[size];  

int ops1, ops2, ops3;  

generateRandomArrays(size, data0, data1, data2, data3);  

ops1 = quickSort(data1, 0, size-1, 1);  

ops2 = quickSort(data2, 0, size-1, 2);  

ops3 = quickSort(data3, 0, size-1, 3);  

if (display) {  

cout << "Unsorted Array: ";  

print(data0, size);  

}  

cout << endl << endl << "> QuickSort #1: pivot is at the median" << endl;  

cout << "Swaps done: " << ops1 << endl;  

if (display) {  

cout << "Sorted Array: ";  

print(data1, size);  

}  

cout << endl << endl << "> QuickSort #2: pivot is at the start" << endl;  

cout << "Swaps done: " << ops2 << endl;  

if (display) {  

cout << "Sorted Array: ";  

print(data2, size);  

}  

cout << endl << endl << "> QuickSort #3: pivot is at the end" << endl;  

cout << "Swaps done: " << ops3 << endl;  

if (display) {  

cout << "Sorted Array: ";  

print(data3, size);  

}  

}  

void enterArray(int size, bool display) {  

// declare some variables  

int* data0 = new int[size];  

int* data1 = new int[size];  

int* data2 = new int[size];  

int* data3 = new int[size];  

int ops1, ops2, ops3;  

int value;  

for (int i=0; i<size; i++) {  

cout << "Enter value " << i+1 << " of " << size << ": ";  

cin >> value;  

data0[i] = value;  

data1[i] = value;  

data2[i] = value;  

data3[i] = value;  

}  

ops1 = quickSort(data1, 0, size-1, 1);  

ops2 = quickSort(data2, 0, size-1, 2);  

ops3 = quickSort(data3, 0, size-1, 3);  

if (display) {  

cout << "Unsorted Array: ";  

print(data0, size);  

}  

cout << endl << endl << "> QuickSort #1: pivot is at the median" << endl;  

cout << "Swaps done: " << ops1 << endl;  

if (display) {  

cout << "Sorted Array: ";  

print(data1, size);  

}  

cout << endl << endl << "> QuickSort #2: pivot is at the start" << endl;  

cout << "Swaps done: " << ops2 << endl;  

if (display) {  

cout << "Sorted Array: ";  

print(data2, size);  

}  

cout << endl << endl << "> QuickSort #3: pivot is at the end" << endl;  

cout << "Swaps done: " << ops3 << endl;  

if (display) {  

cout << "Sorted Array: ";  

print(data3, size);  

}  

}  

int main(int argc, char** argv) {  

int choice;  

char option;  

int num;  

bool end = false;  

bool display = false;  

while (!end) {  

printMenuOptions();  

cin >> choice;  

switch (choice) {  

case 1:  

cout << endl << "Enter size of array (elements will be integers randomly generated): ";  

cin >> num;  

if (num > 0) {  

cout << "Values will be randomly generated from 1 to " << num*10 << endl;  

cout << "Do you want to display the sorted arrays? <y/N>: ";  

cin >> option;  

display = (option == 'y') ? true : false;  

simulate(num, display);  

} else {  

cout << endl << "Incorrect size." << endl;  

}  

break;  

case 2:  

cout << endl << "Enter size of array (you will enter the numbers): ";  

cin >> num;  

if (num > 0) {  

cout << "Do you want to display the sorted arrays? <y/N>: ";  

cin >> option;  

display = (option == 'y') ? true : false;  

enterArray(num, display);  

} else {  

cout << endl << "Incorrect size." << endl;  

}  

break;  

case 3:  

end = true;  

break;  

default:  

cout << endl << "Incorrect option. Try again." << endl;  

}  

}  

return 0;  

}

You might be interested in
The spring has a stiffness k = 200 N&gt;m and an unstretched length of 0.5 m. If it is attached to the 3-kg smooth collar and th
ruslelena [56]

Answer:

15.467 m/s

Explanation:

See attached picture.

4 0
4 years ago
Suppose a student rubs a Teflon rod with wool and then briefly touches it to an initially neutral aluminum rod suspended by insu
Oliga [24]

Answer:

Due to touch of teflon, its charge will reduce but will not go to zero. Some amount of its initial charge will be transferred to Aluminum rod. So, aluminum rod will have a non-zero negative charge.

Explanation:

3 0
3 years ago
Explain what a margin of safety is in driving as well as how it can help minimize risk.
Yakvenalex [24]

Answer:

A safety margin is the space left between your vehicle and the next to provide room, time and visibility at every instant

Explanation:

A safety margin is defined as an allowance given between your vehicle and the next vehicle in front to provide enough room, visibility and time to move in a safe manner to prevent the occurrence of an accident at anytime the frontal vehicle suddenly stops or slows down

Safety margins help minimize risks in the following way

1) A common knowledge of safety margins, improves predictability among road users, thereby minimizing the risk traffic accidents caused due to late communication

2) The use of safety margins helps minimize the risk due to a change in driving conditions such as when the road becomes more slippery from being covered with fluid that is being wetted

3) Safety margin can help prevent the occurrence of an accident between vehicles due to failure of a car system, such as a punctured tire or failed breaking system

4) Safety margin helps to protect road users from the introduction of obstacles on the main roads such as ongoing road construction, broken down vehicles, road blockage by vehicles involved in an accident etc

5) Safety margin help protect road users from being involved in an accident due to the loss of driving focus of the driver of the frontal vehicle

6 0
3 years ago
The period of a pendulum T is assumed to depend only on the mass m, the length of the pendulum `, the acceleration due to gravit
zzz [600]

Answer:

The expression is shown in the explanation below:

Explanation:

Thinking process:

Let the time period of a simple pendulum be given by the expression:

T = \pi \sqrt{\frac{l}{g} }

Let the fundamental units be mass= M, time = t, length = L

Then the equation will be in the form

T = M^{a}l^{b}g^{c}

T = KM^{a}l^{b}g^{c}

where k is the constant of proportionality.

Now putting the dimensional formula:

T = KM^{a}L^{b}  [LT^{-} ^{2}]^{c}

M^{0}L^{0}T^{1} = KM^{a}L^{b+c}

Equating the powers gives:

a = 0

b + c = 0

2c = 1, c = -1/2

b = 1/2

so;

a = 0 , b = 1/2 , c = -1/2

Therefore:

T = KM^{0}l^{\frac{1}{2} } g^{\frac{1}{2} }

T = 2\pi \sqrt{\frac{l}{g} }

where k = 2\pi

8 0
3 years ago
In one study the critical stress intensity factor for human bone was calculated to be 4.05 MN/m3/2. If the value of Y in Eq. (2.
Diano4ka-milaya [45]
Where is Eq.(28) ?? You should show it to find the result
6 0
3 years ago
Other questions:
  • The assembly consists of two red brass C83400 copper alloy rods AB and CD of diameter 30 mm, a stainless 304 steel alloy rod EF
    11·1 answer
  • What are the seven problem solving steps?
    12·1 answer
  • WHO EVER COMMENTS FIRST GETS BRAINLIEST LOL
    15·2 answers
  • Acredit report summarizes a person's Acredit score is measure of a person's as a borrower a factor that contributes to a person'
    15·1 answer
  • BIG POINTS AND WILL GIVE BRAINLIEST! Answer all 5 please or I can’t give brainliest and might report!
    10·1 answer
  • Complete the sentence to identify a useful advance in the culinary arts.
    8·1 answer
  • Everyone has only one learning style. True or false? hurry pleasle this exp carees class
    11·1 answer
  • Researchers at the University of__________modified the iPhone to allow it to create medical images.
    9·2 answers
  • Determine the minimum required wire radius assuming a factor of safety of 3 and a yield strength of 1500 MPa.
    15·1 answer
  • A protocol is a set of rules or procedures, usually written, that should be followed in specific situations. Which of the follow
    12·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!