请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我写了一个希尔排序, 用长度为150万的随机数组测试了一下, 为什么比最初版本的快速排序速度还要快很多。

/*用希尔排序算法对一随机数组排序*/
template<typename T>
void shellSort(T *arr, int n)
{

    for (int gap = n / 2; gap > 0; gap /= 2)

        for (int i = gap; i < n; i++) {

            T e = arr[gap];
            int j(i);
            for (int j = i; j > i && e < arr[j]; j -= gap)
                arr[j] = arr[j-gap];
            arr[j] = e;
        }

    for (int i = 1; i < n; i++) {

        T e = arr[i];
        int j(0);
        for (j = i; j > 0 && e < arr[j-1]; j--)
            arr[j] = arr[j-1];
        arr[j] = e;
    }
}

https://img1.sycdn.imooc.com/szimg//5875e6630001b52103230092.jpg

而且 如果是500万个随机数差的更大

https://img1.sycdn.imooc.com/szimg//5875ea1c0001855803540133.jpg


吓到我了。。。

正在回答 回答被采纳积分+3

2回答

liuyubobobo 2017-01-11 16:24:04

如果是使用VS编译器的话,请确保测试性能是在release模式下运行的哦。不然性能测试的结果非常不准确。具体可以看这个问题:http://coding.imooc.com/learn/questiondetail/3603.html


0 回复 有任何疑惑可以回复我~
  • 提问者 mm隔心忘年 #1
    使用的code::blocks
    回复 有任何疑惑可以回复我~ 2017-01-11 16:38:11
  • liuyubobobo 回复 提问者 mm隔心忘年 #2
    看看是不是也有debug或者release模式的区别?或者编译的时候可否加编译优化的参数。在一些情况下,希尔排序比快排快一些是有可能的,但差距这么大是有问题的。
    
    如果你的实现没有问题,我之前的经验是,在一些编译条件下,std::swap大大拖慢了快排的速度。试试看,自己写一个swap,很有可能都比调用std::swap快:)
    回复 有任何疑惑可以回复我~ 2017-01-11 16:47:24
  • 提问者 mm隔心忘年 回复 liuyubobobo #3
    自己写了swap;
    在release模式下
    还是差10倍左右
    回复 有任何疑惑可以回复我~ 2017-01-11 16:54:27
提问者 mm隔心忘年 2017-01-11 16:55:03

https://img1.sycdn.imooc.com/szimg//5875f2ce00014f3009380569.jpg

重新做的测试

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号