八大排序算法之四——快速排序

1、基本思想。选择一个基准元素,通常是第一个元素或者最后一个元素,通过一趟扫描,将待排序元素分为两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序的正确位置,然后再用同样的方法递归的排序划分的两部分。

2、实现。

/**
 * @brief getPosition 快速排序算法的辅助函数
 * 以第一个元素为基准元素,将所有小于基准元素的元素移到基准元素前面
 * 将大于等于基准元素的元素移到基准元素后面
 *
 * @param array 数组首地址
 * @param first 数组第一个元素的位置
 * @param last  数组最后一个元素的位置
 * @return 基准元素在排好序后的数组中的位置
 */
int getPosition(int* array,int first,int last)
{
    int i=first;
    int j=last;
    int tempSave=array[first];
    while (i<j)
    {
        while(i<j&&array[j]>=tempSave)
            j--;
        if(i<j)
        {

            array[i++]=array[j];
        }

        while(i<j&&array[i]<tempSave)
            i++;
        if(i<j)
        {
            array[j--]=array[i];
        }

    }

    array[i]=tempSave;
    return i;
}

void quickSort(int* array,int first,int last)
{
    if(first<last)
    {
        int pos=getPosition(array,first,last);
        quickSort(array,first,pos-1);
        quickSort(array,pos+1,last);
    }
}
int main()
{
    int a[10]={11,42,53,25,36,6,75,8,26,4};
    std::cout<<"before sort:"<<std::endl;
    for(int i=0;i<10;++i)
        std::cout<<a[i]<<"\t";
    std::cout<<std::endl;

    quickSort(a,0,9);


    std::cout<<"after sort:"<<std::endl;

    for(int i=0;i<10;++i)
        std::cout<<a[i]<<"\t";
    std::cout<<std::endl;

    return 0;
}


3、运行结果。


阅读更多
想对作者说点什么? 我来说一句

八大排序算法总结

2012年03月29日 52KB 下载

八大排序算法的MATLAB实现

2016年06月16日 7KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭