Activity 22.3. Debug 1.
This version doesn’t fully sort the array. What is missing?
Compile and run the code below in your own C environment.
#define SIZE 8
#include<stdio.h>
void printArray(int list[],int n);
void quickSort(int list[], int start, int end);
int partition(int list[], int start, int end);
int main(void) {
int list[] = {20,5,8,47,35,2,78,24}; /* unsorted numbers */
printf("Unsorted array\n");
printArray(list,SIZE);
quickSort(list,0, SIZE-1);
printf("Sorted array\n");
printArray(list,SIZE);
return 0;
}
int partition(int list[], int start, int end){
int i, j, pivot, swap;
pivot = list[end];
i = start - 1;
for(j=start; j<end; j++){
if(list[j]<pivot){
i++;
swap = list[i];
list[i] = list[j];
list[j] = swap;
}
}
i++;
swap = list[end];
list[end] = list[i];
list[i] = swap;
printArray(list,SIZE);
return i;
}
void quickSort(int list[], int start, int end){
int i;
if(end>start){
i = partition(list, start, end);
quickSort(list, start, i-1);
}
else{
return;
}
}
void printArray(int list[],int n){
int i;
for(i=0; i<n; i++){
printf("%d ", list[i]);
}
printf("\n");
}
Hint.
Look closely at how many times
quickSort() calls itself inside its own body. A correct divide-and-conquer sort needs to recurse on both sides of the pivot.

