quicksort.c
#include <stdio.h>
#include <stdlib.h>
#define N 15
void quick_sort(int *data, int left, int right);
int partion(int *data, int left, int right);
int compare(const void *p1, const void *p2);
int main()
{
int data[N] = {0};
int i;
srandom(10);
for (i = 0; i < N; i++)
{
data[i] = random() % 100;
}
printf("sort before:\n");
for (i = 0; i < N; i++)
{
printf("%d ", data[i]);
}
quick_sort(data, 0, N - 1);
puts("");
printf("sort after:\n");
for (i = 0; i < N; i++)
{
printf("%d ", data[i]);
}
puts("");
printf("qsort():\n");
qsort(data, N, sizeof(int), compare);
for (i = 0; i < N; i++)
{
printf("%d ", data[i]);
}
puts("");
return 0;
}
void quick_sort(int *data, int left, int right)
{
int mid;
if (NULL == data)
{
return;
}
if (left >= right)
{
return;
}
mid = partion(data, left, right);
quick_sort(data, left, mid - 1);
quick_sort(data, mid + 1, right);
}
int partion(int *data, int left, int right)
{
int temp = data[left];
while (left < right)
{
while (left < right && data[right] >= temp)
{
right--;
}
data[left] = data[right];
while (left < right && data[left] <= temp)
{
left++;
}
data[right] = data[left];
}
data[left] = temp;
return left;
}
int compare(const void *p1, const void *p2)
{
return (*(const int *)p1 - *(const int *)p2);
}