问题3 排序

快速排序

1.分解:以a[p]为基准元素将a[p:r]划分成3段 a[p:q-1],a[q]和a[q+1:r],使a[p:q-1]中任意一个元素小于等于a[q],而a[q+1:r]中任何一个元素大于等于a[q],下标q在划分过程中确定;
2.递归求解:通过递归调用快速排序算法分别对a[p:q-1]和a[p+1:r]进行排序;
3.合并;

4.

5.代码实现
#include<iostream>
using namespace std;
int Partition(int a[5],int p,int r){
    int i=p,j=r+1;
    int x=a[p];
    while(true){
        while(a[++i]<x&&i<r);
        while(a[--j]>x);
        if(i>=j) break;
        swap(a[i],a[j]);
        }
        a[p]=a[j];
        a[j]=x;
        return j;
}
void QuickSort(int a[5],int p,int r){
    if(p<r){
        int q=Partition(a,p,r);
        QuickSort(a,p,q-1);
        QuickSort(a,q+1,r); 
    }
}
int main()
{
    int a[5]={9,3,4,1,7};
    QuickSort(a,0,4);
    for(int i=0;i<5;i++) cout<<a[i];
 } 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容