9种排序算法性能之比较之----快速排序

(四)快速排序

实现代码:

这里实现了两个版本

/*!

*  from wiki
*/
void quick_sort1 (int data[], size_t left,size_t right)
{
    size_t p = (left + right) / 2;
    int pivot = data[p];
    size_t i = left,j = right;
    for ( ; i < j;) {
        while (! (i>= p || pivot < data[i]))
            ++i;
        if (i < p) {
            data[p] = data[i];
            p = i;
        }
        while (! (j <= p || data[j] < pivot))
            --j;
        if (j > p) {
            data[p] = data[j];
            p = j;
        }
    }
    data[p] = pivot;
    if (p - left > 1)
        quick_sort1 (data, left, p - 1);
    if (right - p > 1)
        quick_sort1 (data, p + 1, right);
}
/*!
 * implemented by mengzhaofeng, 正序或者逆序时性能很差O(n^2),数据分布比较随机时情况较好,受样本分布影响比较大,不稳定
 */
void quick_sort2(int *data, int first, int last)
{
    int i = first, j = last-1, k = last;
    int base = data[last];
    while(i <= j) {
        while(data[i] <= base && i < k) i++;
        if(i < k) {
            data[k] = data[i];
            k = i;
            i++;
        }
        while(data[j] >= base && j > k) j--;
        if(j > k) {
            data[k] = data[j];
            k = j;
            j--;
        }
    }
    data[k] = base;
    if(k > first+1) quick_sort2(data, first, k-1);
    if(k < last-1) quick_sort2(data, k+1, last);
}
/*!
 * 快速排序
 */
double QuickSort(int *data, int size)
{
    double res = 0;
    //EClock<> Ek;
    quick_sort2(data, 0, size-1);
    //res = Ek.microsecond();
    return res;
}
测试结果:

                单位:us

100.30187
200.60374
502.11309
1004.226179
2008.452358
50022.33838
100047.69545
200099.91895
3000196.8192
4000213.422
5000265.9474
6000328.7364
7000384.2804
8000442.2395
9000497.4817
10000575.666
200001183.632
500003784.241
1000006740.454
20000015107.68
50000042416.65
80000063804.13
100000080738.13
变化趋势:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值