I am not sure what is wrong with my code but at line 30 when the recursion starts my program breaks and only prints out the unsorted array and the quickSort algorithm never finishes. If anyone has any clue as to why this program is not working correctly please let me know. Thank you in advance.
#include <iostream>
#include <time.h>
using namespace std;
void quickSort(int qarray[], int l, int r){
int i = l, j = r;
int temp;
int pivot = qarray[(l+r)]/2;
//partitioning
while(i<=j){
while(qarray[i]< pivot)
i++;
while(qarray[j] > pivot)
j--;
if(i<=j){
temp = qarray[i];
qarray[i] = qarray[j];
qarray[j] = temp;
i++;
j--;
}
}
//Recursion of the quicksort algorithm
if(l < j){
quickSort(qarray,l,j);
}
if(i < r){
quickSort(qarray,i,r);
}
}
int main(){
clock_t tStart = clock();
int myArray[26] ={4,2,5,6,1,3,17,14,67,45,32,66,88,
78,69,92,93,21,25,23,71,61,59,60,30,79};
for(int i=0;i < 26;i++){
cout << "Unsorted: " << myArray[i] << endl;
}
quickSort(myArray,0,25);
for(int i=0;i < 26;i++){
cout << "Sorted: " << myArray[i] << endl;
}
double seconds = clock() / double(CLK_TCK);
cout << "This program has been running for " << seconds << " seconds." << endl;
system("pause");
return 0;
}
Error in this line (at least):
int pivot = qarray[(l+r)]/2;Must be
int pivot = qarray[(l + r) / 2];There is no sense to divide element of array by 2. Pivot is middle element of range which index is
(l + r) / 2.