From 7e0f021a9aec35fd8e6725e87e3313b101d26f5e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sun, 27 Jan 2008 11:37:44 +0100 Subject: Initial import (2.0.2-6) --- reference/C/CONTRIB/SNIP/rg_qsort.c2 | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 reference/C/CONTRIB/SNIP/rg_qsort.c2 (limited to 'reference/C/CONTRIB/SNIP/rg_qsort.c2') diff --git a/reference/C/CONTRIB/SNIP/rg_qsort.c2 b/reference/C/CONTRIB/SNIP/rg_qsort.c2 new file mode 100755 index 0000000..413ccab --- /dev/null +++ b/reference/C/CONTRIB/SNIP/rg_qsort.c2 @@ -0,0 +1,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; + } + } +} -- cgit v1.2.3-54-g00ecf /?id=0d64b568fcd48b133721c1d322e7c51d85eb12df'>treecommitdiff
diff options
context:
space:
mode: