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

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、运行结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值