summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/strsort.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/strsort.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/strsort.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/strsort.c b/reference/C/CONTRIB/SNIP/strsort.c
new file mode 100755
index 0000000..ed083d1
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/strsort.c
@@ -0,0 +1,34 @@
+/*
+** strsort() -- Shell sort an array of string pointers via strcmp()
+** public domain by Ray Gardner Denver, CO 12/88
+*/
+
+#include <string.h>
+#include <stddef.h>
+
+void strsort (char **array, size_t array_size)
+{
+ size_t gap, i, j;
+ char **a, **b, *tmp;
+
+ for (gap = 0; ++gap < array_size; )
+ gap *= 2;
+ while (gap /= 2)
+ {
+ for (i = gap; i < array_size; i++)
+ {
+ for (j = i - gap; ;j -= gap)
+ {
+ a = array + j;
+ b = a + gap;
+ if (strcmp(*a, *b) <= 0)
+ break;
+ tmp = *a;
+ *a = *b;
+ *b = tmp;
+ if (j < gap)
+ break;
+ }
+ }
+ }
+}