zoukankan      html  css  js  c++  java
  • 引用 qsort与sort的比较


    引用

    linpder qsort与sort的比较
        在C/C++标准库中提供了快速排序的函数qsort();在STL中也提供了sort()排序函数,那么这两个函数哪个快呢?之前与代码->诗(hotman_x)交流了封装排序算法的看法,他告诉我sort要比qsort快,为此我专门做了一番验证。
        取int类型的数据进行排序,对数据规模为1000,10000,100000的数据集分别在VC6.0(Debug and Release模式),Dev C++(集成GCC/G++编译器的IDE工具)和CodeBlock(一个开源的C/C++ IDE编译工具)进行了比较,得到如下结果:
    一 VC Debug模式下
    1)数据规模为1000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    2)数据规模为10000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    3)数据规模为100000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    二 VC Release模式下
    1)数据规模为1000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    2)数据规模为10000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    3)数据规模为100000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    三 Dev C++工具下
    1)数据规模为1000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    2)数据规模为10000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    3)数据规模为100000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    四 CodeBlock工具下
    1)数据规模为1000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    2)数据规模为10000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
    3)数据规模为100000
    引用 qsort与sort的比较 - 罗宸 - 罗宸 的博客
        从以上的结果中不难看出,同样的数据规模,在VC下qsort排序算法需要的时间是sort的2倍以上(看来代码->诗(hotman_x)说的没错:P)。两者都是“快速排序”,但qsort采用的不是简单的快速排序,而是结合内插排序算法,并且编译器根据运行平台作了一定的优化,可以保证很好的平均性能。在DEV C++和CodeBlock下,编译器不会对代码作任何的优化,qsort反而要比sort快不少!在这两个平台下的运行速度应该是比较客观地反应qsort和sort的快慢!相信在linux/unix下qsort要比sort快(有测试平台的朋友可以试试)。

    验证代码如下,代码中用到了一个自己写的
    精确计时类

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include "MyTimer.h"
    #include <stdlib.h>

    using namespace std;

    const int C_Size = 100000;

    int Compare(const void *a,const void *b)
    {
        return (*(int *)a - *(int *)b);
    }

    int main()
    {    
        vector<int> num;  
        int i,element;
        int array[C_Size];
        MyTimer mt;

        cout << "排序规模为:" << C_Size << endl;

        for(i=0;i<C_Size;i++)
        {
            element = rand()%1000;
            num.push_back(element);
            array[i] = rand()%1000;
        }
        
        mt.Start();
        sort(num.begin(),num.end());
        mt.End();
        cout << "sort() cost time:" << mt.costTime << " us" << endl;

        mt.Reset();
        mt.Start();    
        qsort(array,C_Size,sizeof(int),Compare);
        mt.End();
        cout << "qsort() cost time:" << mt.costTime << " us" << endl;

        return 0;
    }


  • 相关阅读:
    浅尝DesignPattern_AbstractFactory
    浅尝DesignPattern_OCP&DIP
    浅尝DesignPattern_Strategy
    浅尝EffectiveCSharp_2
    浅尝EffectiveCSharp_5
    浅尝EffectiveCSharp_3
    浅尝DesignPattern_Factory
    浅尝DesignPattern_Template
    我的ASP.NET之旅_基础知识&安装运行环境
    浅尝DesignPattern_Proxy
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4477389.html
Copyright © 2011-2022 走看看