代码改变世界

基数排序-纪念欧某新

2017-12-19 17:21  woodzcl  阅读(324)  评论(0编辑  收藏  举报

这个得说道说道

当人们以为分治法排序很牛逼的时候;另有一部分人也认为分治法很牛逼,很牛逼。。。,但有没有除了分治和一眼就能想到的分治之前的那些想法外还有其它途径呢。

于是,大家想啊想啊。。。,什么时候出了结果了呢?当哲学家介入后,事情有了转机,其实,哲学家的另一重身份就是数学家。

这些牛牛们这样想得啊,“传统的方法已经无法再突破了,只能往更高维的空间里去要结果了。“,于是,多排序(多个特征可以排序)里边顺便就解决了单排序的问题。

牛啊,牛啊。。。。

——————————————————————————————————————————————————————————————————————————

//MSD

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

#define rd 10

#define d 3

#define maxSize 20

 

int getDigit(int x, int k)

{

    if (k<1||k>d)

    {

        return -1;

    }

    for (int i=1; i<=d-k; i++)

    {

        x /= 10;

    }

    return x%10;

}

 

void radixsort(int arr[], int left, int right, int k)

{

    if (left>=right||k>d)

    {

        return;

    }

 

    int i, j, v, p1, p2, count[rd], posit[rd];

    int *auxArray = (int*)malloc((right-left+1)*sizeof(int));

 

    for (j=0; j<rd; j++)

    {

        count[j] = 0;

    }

    for(i=left; i<=right; i++)

    {

        v = getDigit(arr[i], k);

        count[v]++;

    }

    posit[0] = 0;

    for(j=1; j<rd; j++)

    {

        posit[j] = posit[j-1]+count[j-1];

    }

 

    for (i=left; i<=right; i++)

    {

        v = getDigit(arr[i], k);

        auxArray[posit[v]++] = arr[i];

    }

    for (i=left, j=0; i<=right; i++, j++)

    {

        arr[i] = auxArray[j];

    }

   

    free(auxArray);

 

    p1 = left;

    for (j=0; j<rd; j++)

    {

        p2 = p1+count[j]-1;

        radixsort(arr, p1, p2, k+1);

        p1 = p2+1;

    }

}

 

void main()

{

    int arr[] = {332, 633, 59, 598, 232, 664, 179, 457, 825, 714, 405, 361};

    int len = sizeof(arr)/sizeof(int);

 

    radixsort(arr, 0, len-1, 1);

 

    for (int i=0; i<len; i++)

    {

        printf("%d ", arr[i]);

    }

 

    printf("\n");

}

// result

# ./sort
59 179 232 332 361 405 457 598 633 664 714 825

Finally:

这个现象就给了我启发,我们在大学,甚至于更高阶段的学习中,老是碰到要学那些个平常根本用不到的知识,大家应该都有感受!!!,自己脑补。

这些个知识到底有用没用?答案是,如果你以后做工程师,那么你可以了解哪些知识,不做精通要求。如果,你以后要处于人类级别的牛牛圈里,要为人类的远大未来谋福利,那这个问题就大大的有用了。

说个科技故事:

我们生活在三维空间,我们终极理解范围也不过就是你在某某年某个空间里干了了啥子事而已,有时候这个脑海里的记忆都有些模糊了。如果,四维空间的人类邀请你去旅游(我不知道你能不能活着到达四维,但这里假如你能够!!!),那么你在脑海中的努力回忆那个啥子事情,那么痛苦,那么无奈,在那些人的眼里,就是给你指出来个位置,你去瞟一眼,你废了吃奶劲在回想的事情不过就是你用眼睛又看了一遍,大家知道这个一遍是高度一致的回放,你不会漏掉任何一点蛛丝马迹,就跟你重新来过一样。看见了吧,你费了牛劲的结果不过就是人家吹口气的无足轻重的无视而已。

所以,现在人类牛牛们已经开始学会了用更高级的思想来实现我们如何飞出太阳系的办法,我相信他们一定能成功,因为他们代表了人类的希望!!!

千言万语汇成一句话,”活着就是希望,永远别气馁,你不知道未来有多精彩!!!“

让我们为欧某新同志默哀。。。,让我以此文来纪念这位同志,虽然我们素未平生,但他的遭遇值得我们所有程序员共鸣,愿逝者安息!!!,愿人类充满希望!!!!