The integer version in your code needs int *arr = new int[n];to allocate an array of integers.
To do this with an array of strings, declare char **arr = new char*[n];and use strdupchar to assign an array to each row.
qsort , . if(arr[j]<=pivot){} if(strcmp(arr[j], pivot) <= 0){}
void swap(char* &a, char* &b)
{
char *t = a;
a = b;
b = t;
}
int partition(char** arr, int lo, int hi)
{
int i = lo - 1;
for(int j = lo; j < hi - 1; j++)
{
if(strcmp(arr[j], arr[hi]) < 0)
{
i++;
swap(arr[i], arr[j]);
}
}
if(strcmp(arr[hi], arr[i + 1]) < 0)
swap(arr[hi], arr[i + 1]);
return i + 1;
}
void quicksort(char** arr, int const lo, int const hi)
{
if(lo < hi)
{
int p = partition(arr, lo, hi);
quicksort(arr, lo, p);
quicksort(arr, p + 1, hi);
}
}
void print(char **arr, int size)
{
for(int i = 0; i<size; i++)
cout << arr[i] << ", ";
cout << "\n";
}
int main()
{
int n;
cout << "Enter Number of Elements: ";
cin >> n;
cout << "Enter Elements in Array to be sorted:\n";
char buf[255];
char **arr = new char*[n];
for(int i = 0; i < n; i++)
{
cout << "Enter " << i << "th element: ";
cin >> buf;
arr[i] = strdup(buf);
}
quicksort(arr, 0, (n - 1));
cout << "Sorted:\n";
print(arr, n);
cout << "\n";
for(int i = 0; i < n; i++)
free(arr[i]);
delete[]arr;
return 0;
}
1: quicksort
2: . strdup free