您的位置:首页 > 编程语言 > C语言/C++

C++中几种数据交换方法的效率对比

2014-05-26 21:09 232 查看
两个数据交换在编程中很常用,比如排序算法中就经常要用到,下面介绍常用的三种方法,并对它们的效率作出对比,以便在大量用到交换的程序中提高效率。

假设要交换的两个数据为data_1和data_2

第一种方法,使用一个临时temp,代码如下:

temp  =  data_1;
data_1  =  data_2;
data_2  =  temp;
第二种方法,直接不用额外的存储空间,直接在两个数据上操作,但是这种方法有可能在两个数相加时产生越界的问题。代码如下:

<pre name="code" class="cpp">//假设data_11 = data_1, data_22 = data_2   
//data_1 = data_11 + data_22
//data_2 = data_11 + data_22 - data_22 = data_11
//data_1 = data_11 + data_22 - (data_11 + data_22 - data_22) =data_22
data_1  =  data_1  + data_2;
data_2  =  data_1  - data_2;
data_1  =  data_1  - data_2;




第三种方法是使用异或运算符,代码如下:

data_1 ^= data_2;
data_2 ^= data_1;
data_1 ^= data_2;


下面进行效率测试,对每种方法,进行大数量的操作,然后比较执行时间,代码如下:

const int num = 100000000;
int main(int argc, char **argv)
{
    int data_1 = 1234, data_2 = 5678, temp = 0;
    clock_t start = 0, finish = 0, duration = 0;

    //运行50次,取平均
    for (int i=0; i<50; ++i)
    {
        start = clock();
        for (int i=0; i<num; ++i)
        {
            //swap method
        }
        finish = clock();
        duration += finish - start;
    }

    cout << "平均运行时间为:" << duration / 50 << "毫秒" << endl;

    return 0;
}


运行结果:

第一种方法:平均运行时间334毫秒

第二种方法:平均运行时间879毫秒

第三种方法:平均运行时间799毫秒

结果显示,第一种方法效率最高,虽然第一种方法占据一个额外的内存空间,但是交换的三行代码实现的都是赋值操作,相对后两种的加减和异或要快很多。所以,当交换量大时,推荐用第一种方法,速度快,而且最容易理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: