#include <stdio.h>
#include <stdlib.h>
void swap(int *nums, int i, int j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
return;
}
int *Partition(int *nums, int left, int right)
{
int less = left - 1;
int more = right;
while (left < more) {
if (nums[left] < nums[right]) {
swap(nums, ++less, left++);
} else if (nums[left] > nums[right]) {
swap(nums, --more, left);
} else if (nums[left] == nums[right]) {
left++;
}
}
swap(nums, more, right);
int *p = (int*)malloc(sizeof(int) * 1);
*p = less + 1;
*(p + 1) = more;
return p;
}
void QuickSort(int *nums, int left, int right)
{
if (left < right) {
int randNum = rand() % (right - left + 1);
printf("%d\n", randNum);
swap(nums, left + randNum, right);
int *p = (int*)malloc(sizeof(int) * 2);
p = Partition(nums, left, right);
QuickSort(nums, left, p[0] - 1);
QuickSort(nums, p[1] + 1, right);
}
}
int main()
{
int nums[10] = {12, 34, 15, 2, 5, 14, 16, 10, 9, 1};
printf("Before sort: ");
for (int i = 0; i < 10; i++) {
printf(" %d", nums[i]);
}
printf("\n");
QuickSort(nums, 0, 9);
printf("After sort: ");
for (int i = 0; i < 10; i++) {
printf(" %d", nums[i]);
}
printf("\n");
return 0;
}