-
Notifications
You must be signed in to change notification settings - Fork 0
/
quick_sort.c
36 lines (33 loc) · 965 Bytes
/
quick_sort.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "quick_sort.h"
int partition(void* data, int l, int r, size_t size, int(*comp)(void*,void*),void(*swap)(void*,void*),void*(*next)(void*,int n))
{
void* p = malloc(size);
p = next(data, l);
int i = l;
int j = r + 1;
do
{
do
{
i++;
}while(comp(next(data, i), p) < 0);
do
{
j--;
}while(comp(next(data, j), p) > 0);
swap(next(data, i), next(data, j));
}while( i < j);
swap(next(data, i), next(data, j));
swap(next(data, l), next(data, j));
free(p);
return j;
}
void quick_sort(void* data, int l, int r, size_t size, int(*comp)(void*,void*), void(*swap)(void*,void*),void*(*next)(void*,int n))
{
if(l<r)
{
int s = partition(data, l, r,size, comp,swap,next);
quick_sort(data, l, s-1, size, comp, swap, next);
quick_sort(data, s+1, r, size, comp, swap, next);
}
}