The tiniest C sort function?
2016-03-28 本文已影响22人
Troubleshooting
今天像往常一样,我就像一个爬虫一样,链接点着点着就点到了这里来了 Tiniest sort,于是被吸引住了。这网站上给了一段所谓最短排序代码:
s(a,n)int*a;{n-->1?s(a,n),s(a+1,n),n=*a,*a=a[1],a[n>*a]=n:0;}
我对代码 indent
一下,以及一点人性化修改,并用一个数组测试,有兴趣的小伙伴可以直接复制下面的代码保存为 tiniest_sort.c
编译并运行,
extern int printf (const char *, ...);
void t_sort(int *a, int n)
{
if (n-- > 1) {
t_sort(a, n);
t_sort(a + 1, n);
n = *a;
*a = a[1];
a[n > *a] = n;
}
}
int px (int *x, int n)
{
int i; for (i = 0; i < n; i++)
printf ("%d ", x[i]);
return printf ("\n") - 1;
}
int main()
{
int x[] = {1, 3, 5, 7, 9, 2, 4, 6, 8, 0};
t_sort(x, 10);
return px(x, 10);
}
编译并运行
$ gcc tiniest_sort.c
$ ./a.out
0 1 2 3 4 5 6 7 8 9
这段排序代码虽很短,其实有很多内容可讲,我就当是吸引小伙伴们的兴趣了。a[n > *a] = n;
这一块涉及语言特性,简单说下,不是 a[0] = n;
,就是 a[1] = n;
。