blob: 413ccabd7becde8827367e1f2040e8dcfce57bf2 (
plain)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/*
** quicksort.c -- quicksort integer array
**
** public domain by Raymond Gardner 12/91
*/
static void swap(int *a, int *b)
{
register int t;
t = *a;
*a = *b;
*b = t;
}
void quicksort(int v[], unsigned n)
{
unsigned i, j, ln, rn;
while (n > 1)
{
swap(&v[0], &v[n/2]);
for (i = 0, j = n; ; )
{
do
--j;
while (v[j] > v[0]);
do
++i;
while (i < j && v[i] < v[0]);
if (i >= j)
break;
swap(&v[i], &v[j]);
}
swap(&v[j], &v[0]);
ln = j;
rn = n - ++j;
if (ln < rn)
{
quicksort(v, ln);
v += j;
n = rn;
}
else
{
quicksort(v + j, rn);
n = ln;
}
}
}
|