#include <stdio.h>
#include <stdlib.h>
void swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int partition(int arr[], int low, int high) {
int temp = arr[low];
int left = low;
int right = high;
while (left != right) {
while (temp <= arr[right] && left < right) {
right--;
}
while (temp >= arr[left] && left < right) {
left++;
}
if (left < right) {
swap(arr, left, right);
}
}
return left;
}
void quicksort(int arr[], int low, int high) {
if (low >= high) {
return;
}
int temp = arr[low];
int pivot = partition(arr, low, high);
arr[low] = arr[pivot];
arr[pivot] = temp;
quicksort(arr, low, pivot - 1);
quicksort(arr, pivot + 1, high);
}
void printIntArray(int array[], int length) {
int i;
for (i = 0; i < length; i++) {
printf("%3d", array[i]);
}
}
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
int len = 0;
int i = 0;
printf("input length: ");
scanf("%d", &len);
printf("input array elements: ");
int arr[len];
for (; i < len; i++) {
scanf("%d", &arr[i]);
}
printf("Before sorted:\n");
printIntArray(arr, len);
quicksort(arr, 0, len - 1);
printf("\nAfter sorted:\n");
printIntArray(arr, len);
return EXIT_SUCCESS;
}