请你说一说洗牌问题的思路并手写代码,并设计测试用例

发布于 2020-01-27 19:56:32
关注者
0
被浏览
810
1 个回答
  • 面试哥
    面试哥 2020-01-27
    为面试而生,有面试问题,就找面试哥。

    参考回答:

    洗牌问题:有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。

    void PerfectShuffle(int *A,int n){
    if(n <= 1){
    return;
    }//if
    //
    int size = 2*n;
    int index,count;
    for(int i = n;i < size;++i){
    

    // 交换个数

    count = n - (i - n) - 1;

    // 待交换

    index = i;
    for(int j = 1;j <= count;++j){
    swap(A[index],A[i-j]);
    index = i - j;
    }//for
    }//for
    }
    };
    

    可以就数组的类型,可以是int型的,浮点型的,还可以是大数类型,负数,进行测试。

推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看