快速排序基于分治法的思想


对于快速排序的自我小结:
关键在于伪代码的理解,这同样是采用了分治法的思想


#include <iostream>

using namespace std;

//找到基准元素下标的函数
int FindPos(int arr[],int low,int high)
{
    //找到基准元素的值
    int val = arr[low];
    while(low<high)
    {

        //对于右边的值若是大于基准元素的值,
        //那么,右边元素位置下标向左移动一位
        // ,然后以右边第二个元素和基准元素比较
        while(low<high&&arr[high]>=val)
            //下标减减就代笔位置向左边移动一位
            --high;
        //当右边的元素小于基准元素的时候,将较小的值赋给基准元素位置的变量
        arr[low]=arr[high];

        //如果交换下标之后,钙元素的的值小于基准元素
        //那么较小元素的下标向右移动一位
        //总之基准元素的下标不变
        while(low<high&&arr[low]<=val)

            ++low;


        arr[low]=arr[high];

    }
    arr[low]=val;

    //这个地方low或者high都可以,因为上面的while循环结束后,low和hign是相等的
    //返回的只是一个小标,也就是第一次快排完成后得到的基准元素下标位置
    return low;


}

void quickSort(int arr[],int low,int high)
{
    //pos 用于记录排序序列的第一个元素的位置
    int pos ;

    //只有当下限小于上限的时候才进行排序,
    //用于记录排序序列的开始元素和结束元素
    if(low<high)
    {
        //找打第一次劈两半之后,第一个元素的下标
        //FindPos(a,low,high)这个函数的主要作用在于找打
        //第一次排序后第一次基准元素的下标
        pos=FindPos(arr,low,high);

        //对最左边的一半元素采用同样的方法进行排序
        quickSort(arr,low,pos-1);
        //对最右边的一半元素采用劈两半的方式进行排序
        quickSort(arr,pos+1,high);
    }



}



int main()
{

    int a[6]= {2,1,0,5,4,3};


    for(int  i=0; i<6; i++)
        cout<<a[i]<<"   ";
    cout<<endl;


    quickSort(a, 0,5);
    cout<<"After sort the result is\n";
    for(int  i=0; i<6; i++)
        cout<<a[i]<<"   ";



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值