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

来源:

mm隔心忘年

2017-01-11

/*用希尔排序算法对一随机数组排序*/
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;
    }
}

http://szimg.mukewang.com/5875e6630001b52103230092.jpg

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

http://szimg.mukewang.com/5875ea1c0001855803540133.jpg


吓到我了。。。

写回答

2回答

liuyubobobo

2017-01-11

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


0
3
mm隔心忘年
回复
liuyubobobo
自己写了swap; 在release模式下 还是差10倍左右
2017-01-11
共3条回复

mm隔心忘年

提问者

2017-01-11

//szimg.mukewang.com/5875f2ce00014f3009380569.jpg

重新做的测试

0
2
mm隔心忘年
回复
liuyubobobo
OK! 谢谢老师
2017-01-11
共2条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程