码迷,mamicode.com
首页 > 编程语言 > 详细

选择排序和快速排序性能比较

时间:2015-02-11 20:43:10      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:选择排序   快速排序   

这里为了不修改我之前的文章,重新贴一下之前的代码

//selectSort && quickSort comparison
#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition(int a[], int idxLeft, int idxRight, int idxPivot)
{
    int i, idxCur = idxLeft;

    int pivot = a[idxPivot];
    swap(&a[idxPivot], &a[idxRight]);

    for(i = idxLeft; i < idxRight; i++){
        if(a[i] <= pivot){
            swap(&a[i], &a[idxCur]);
            idxCur++;
        }
    }

    swap(&a[idxCur], &a[idxRight]);
    return idxCur;
}

void quicksort(int a[], int idxLeft, int idxRight)
{
    if(idxLeft >= idxRight){
        return;
    }

    int idxPivot;
    idxPivot = partition(a, idxLeft, idxRight, (idxRight + idxLeft)/2);

    quicksort(a, idxLeft, idxPivot - 1);
    quicksort(a, idxPivot + 1, idxRight);
}

void selectSort(int a[], int size)
{
    int i, j, aux;//auxiliary
    for(i = 0; i< size - 1; i++){
        aux = i;
        for(j = i + 1; j < size; j++){
            if(a[aux] > a[j]){
                aux = j;
            }
        }
        if(i != aux){
            swap(&a[i], &a[aux]);
        }
    }
}

#define DEBUG_SORTx
int main(int argc, char **argv)
{
    if(argc != 2){
        printf("\tusage : ./test SIZE\n");
        return -1;
    }
    //the larger the SIZE, the better of the quick sort
    int SIZE = atoi(argv[1]);
    int a[SIZE], i, b[SIZE];
    struct timeval tv1, tv2, tv3;

    srand(time(NULL)^getpid());

    for(i = 0; i < SIZE; i++){
        a[i] = rand() % 1000;
    }
    a[0] = 73, a[1] = 97, a[2]= 26;
    memcpy(b, a, sizeof(a));

    int size = sizeof(a)/sizeof(int);

    gettimeofday(&tv1, NULL);      //(2)

    selectSort(a, size);

    gettimeofday(&tv2, NULL);

    printf("s : %.3lf ms\n", (tv2.tv_usec - tv1.tv_usec) * 1.0 / 1000 + (tv2.tv_sec - tv1.tv_sec) * 1000);

    quicksort(b, 0, size - 1);
    gettimeofday(&tv3, NULL);

    printf("q : %.3lf ms\n", (tv3.tv_usec - tv2.tv_usec) * 1.0 / 1000 + (tv3.tv_sec - tv2.tv_sec) * 1000);

#ifdef DEBUG_SORT
    for(i = 0; i< size; i++){
        printf("%d\t", a[i]);
    }
    printf("\n");

    for(i = 0; i< size; i++){
        printf("%d\t", b[i]);
    }
    printf("\n");
#endif

    return 0;
}


运行./out 100000

输出结果:

s : 11630.885 ms
q : 42.877 ms

10万条数据排序,二者性能已经相当明显。选择排序使用了11.6s,而快速排序只用了42.9ms


选择排序和快速排序性能比较

标签:选择排序   快速排序   

原文地址:http://blog.csdn.net/shelsea_x/article/details/43737295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!