zoukankan      html  css  js  c++  java
  • 锦标赛排序

    算法原理与阐述略

    这个算法如果从比赛的角度考虑,那么能够理解还是很容易得,但是要是和计算机算法联系起来,就不那么容易理解了。

    但好在算法的入口参数还是与其它排序算法没有什么改变,所以,just do it。

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

    //sort.c

    //tournament sort alg, attach space is 2 times than array to being sorted

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #define maxValue 30000

    int player(int i, int n)

    {

        if (0==i%2&&i<2*n-1)

        {

            return i+1;

        }

        else if (1<i)

        {

            return i-1;

        }

    }

    int winner(int A[], int i, int j, int n)

    {

        int u = i>=n?i:A[i];

        int v = j>=n?j:A[j];

        if (A[u]<=A[v])

        {

            return u;

        }

        else

        {

            return v;

        }

    }

    void createWinTree(int A[], int v[], int n, int* value)

    {

        int i, j, k;

        for(i=0; i<n; i++)

        {

            A[n+i] = v[i];

        }

        for(i=2*n-1; i>1; i-=2)

        {

            j = player(i, n);

            k = i/2;

            A[k] = winner(A, i, j, n);

        }

        *value = A[A[1]];

        A[A[1]] = maxValue;

    }

    void reCreateWinTree(int A[], int n, int* value)

    {

        int i = A[1], j, k;

        while (i>1)

        {

            j = player(i, n);

            k = i/2;

            A[k] = winner(A, i, j, n);

            i = k;

        }

        *value = A[A[1]];

        A[A[1]] = maxValue;

    }

    void tournamentsort(int A[], int arr[], int n)

    {

        int value;

        createWinTree(A, arr, n, &value);

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

        {

            arr[i] = value;

            reCreateWinTree(A, n, &value);

        }

    }

    void main()

    {

        int arr[] = {99, 21, 13, 15, 54, 32, 44, 27, 68, 88, 76, 89};

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

        int *A = (int*)malloc(len*2*sizeof(int));

        tournamentsort(A, arr, len);

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

        {

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

        }

        printf(" ");

        free(A);

    }

    Finally:

    越发感觉到,当年算法从无到有产生的过程中,大牛们都经历了怎样的纠结与尝试: 瞻前顾后,有一步退一步,左看看右看看,什么时候该冒进了,什么时候该保守了,得有分寸和取舍,所谓运筹帷幄,其实大多数都代表未到终点的谨慎而已,请记住这句话,对于你分析历史上的文理政经大牛和重大历史事件中,都是举足轻重的方法论;对于你去正确认识理论,实践理论也有绝对的指导意义!!!!

    所以,如果一群人(>=2)翻着资料去讨论一个算法问题,我觉得是正常现象,反之,如果有人拿着算法经验的熟悉程序去表现算法给你看给你听的话,那我想他就应该去学学真理是什么?该如何正真做事才是合理得过程。

    温习算法的体验与感受:总觉得就自己就像小年轻一下,哆哆嗦嗦,得得瑟瑟,好在年龄已到,所以,我又能自我恢复平静。现在,我彻底理解年轻人的所谓精力和饱满的感受了,“那是因为对于不能理所当然消化和永远拥有的事务的渴望与一知半解的兴奋带来的对未来的憧憬中,自然而然的表现。”故而,还是那句话,人类历史长河中的真正大牛很少很少!并且,那些大牛都得沉浸在谦虚与谨慎之中,所以才出了真成绩。

    警示:

    如果大家都得得瑟瑟,那么,我们还是把已有的东西拿来用到极致,为社会生产添砖加瓦,为国为民做点实事。装逼就大可不必了!!!

    对于面试:我觉得提问者和作答者应该平等拥有相同资料,共同探讨理论的实现过程,如果被考核者能够正确寻找到这个理论的正确来由与过程,我想,他应该比你要强,尤其在你们初次接触的层面来说,如果他的作答有60分的话,我想他就应该是你要找的人!!!!。除开这个的其它一切形式都是当今的八股文,它的弊端请自行搜索相关文献(八股文)。历史上能考过八股夺得官名的又有几人取得过杰出成绩!

  • 相关阅读:
    【python】PyQt5 QAction 添加点击事件
    【环境搭建】安装pyQt5 在pycharm报This application failed to start because no Qt platform plugin could be initialized的问题
    【嵌入式】arduino IDE串口监视器可以正常使用但其他软件发送串口指令没有反应的问题
    【操作系统】bat文件 系统找不到文件路径
    十天冲刺:第二天
    十天冲刺:第一天
    项目需求分析NABCD电梯演讲
    项目需求分析与建议-NABCD模型
    团队开发之团队介绍
    会议1.7
  • 原文地址:https://www.cnblogs.com/woodzcl/p/8044446.html
Copyright © 2011-2022 走看看