美文网首页
The tiniest C sort function?

The tiniest C sort function?

作者: Troubleshooting | 来源:发表于2016-03-28 00:11 被阅读22次

今天像往常一样,我就像一个爬虫一样,链接点着点着就点到了这里来了 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;

相关文章

网友评论

      本文标题:The tiniest C sort function?

      本文链接:https://www.haomeiwen.com/subject/swrdlttx.html