零基础学习算法第四课 快速排序

算法思路:每次从待排序序列中选择一个元素作为枢纽元素(通常为待排序数列第一个元素),然后设置一个左指针和一个右指针,当右指针指向的元素大于或等于枢纽元素时,右指针左移(若每次选取第一个元素为枢纽元素,则右指针先动),直到遇到一个比枢纽元素小的元素后停下,然后让左指针右移,直到遇到一个比枢纽元素大的元素后停下,若左右指针未相遇,则交换左右指针指向的元素,然后继续执行以上步骤直至左右指针相遇,最后将枢纽元素与左右指针相遇后指向的元素交换,将枢纽元素放在其最终位置,此称为完成了一趟快速排序。之后递归地对枢纽元素两边的元素序列分别进行快速排序直至整个序列有序。

#include<iostream>
using namespace std;
void swap(int &a,int &b){    //定义交换函数
    int t;
    t=a;
    a=b;
    b=t;
}
void QuickSort(int *a,int begin,int end){    //定义快速排序函数
    if(begin>=end)    //当没有元素或只有一个元素时,递归终止
        return;
    int i=begin,j=end,t=a[begin];
    while(i<j){
        while(i<j&&a[j]>=t)
            j--;
        while(i<j&&a[i]<=t)
            i++;
        swap(a[i],a[j]);
    }
    swap(a[begin],a[i]);    //将枢纽元素移至最终位置
    QuickSort(a,begin,i-1);    //递归对枢纽左边元素进行快速排序
    QuickSort(a,i+1,end);    //递归对枢纽右边元素进行快速排序
}
int main(){
    int a[101],n;
    cout<<"请输入待排序元素个数"<<endl;
    cin>>n;
    cout<<"请输入待排序元素"<<endl;
    for(int i=0;i<n;i++)
        cin>>a[i];
    QuickSort(a,0,n-1);
    for(int i=0;i<n;i++)
        cout<<a[i]<<' ';
    return 0;
}

 2f9d60edb31c49abbbdd8bf4a245c370.png

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值