插入排序快速排序的点

时间:2012-10-16 01:40:34

标签: c sorting

我正在写一个快速排序,当被排序的数组的长度很小时,它会切换到插入排序。我已经运行了一些测试,从我看到的,当被排序的数组是200个元素或更少时,切换到插入排序更快。这看起来真的很大,我期待接近20的东西.200合理还是我的实现方式之一?我使用了基本的维基百科算法。

void quicksort(int list[asize], int left, int right)
{
    int pivotindex;
    int newpivotindex;

    if (left < right)
    {
            if ((right-left)<=200)
            {
            insertionsort(list,left,right);
            }
    }
    else
    {
        pivotindex = r_rand(left,right);
        newpivotindex = partition(list, left, right, pivotindex);

        quicksort(list, left, newpivotindex-1);
        quicksort(list, newpivotindex+1, right); 
    }
    return;
}

int partition(int* list,int left, int right, int pivotindex)
{
int pivotvalue = list[pivotindex];
int temp;
int i;
int storeindex;

temp=list[pivotindex];
list[pivotindex]=list[right];
list[right]=temp;

storeindex=left;

for (i=left;i<right;i++)
{
    if (list[i] < pivotvalue)
    {
        temp=list[i];
        list[i]=list[storeindex];
        list[storeindex]=temp;

        storeindex++;
    }
}

temp=list[storeindex];
list[storeindex]=list[right];
list[right]=temp;

return storeindex;
}

void insertionsort(int* list, int left, int right)
{
int i;
int item;
int ihole;

for (i=left;i<=right;i++)
{
    item=list[i];
    ihole=i;
    while (ihole > 0 && list[ihole-1] > item)
    {
        list[ihole]=list[ihole-1];
        ihole--;
    }
    list[ihole]=item;
}

return;
}

0 个答案:

没有答案