23-5-10--快排--递归快速排序代码模板

daniel350-wang / 2023-05-11 / 原文

#include <iostream>

using namespace std;

//从小到大排序
void quicksort1(int a[],int low,int high)
{
    if(low>=high)
        return;
    int base=a[low];
    int i=low,j=high;
    while(i<j)
    {
        while(a[j]>=base&&i<j)
        {
            j--;
        }
        while(a[i]<=base &&i<j)
        {
            i++;
        }
        if(i<j)
        {
            int t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[low]=a[i];
    a[i]=base;
    quicksort1(a,low,i-1);
    quicksort1(a,i+1,high);
}

//从大到小排序
void  quicksort2(int a[],int low,int high)
{
    if(low>=high)
        return ;
    int i=low,j=high,base=a[low];
    while(i<j)
    {
        while(i<j&&a[j]<=base)
        {
            j--;
        }
        while(i<j&&a[i]>=base)
        {
            i++;
        }
        if(i<j)
        {
            int t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[low]=a[i];
    a[i]=base;
    quicksort2(a,low,i-1);
    quicksort2(a,i+1,high);
}

int main()
{
    int size=10;
    int a[size]={6,1,2,7,9,3,4,5,10,8};
    int b[size]={6,1,2,7,9,3,4,5,10,8};
    quicksort1(a,0,9);
    for(int i=0;i<size;i++)
    {
        cout<<a[i]<<' ';
    }
    cout<<endl;
    quicksort2(b,0,9);
    for(int i=0;i<size;i++)
    {
        cout<<b[i]<<' ';
    }
    cout<<endl;
    return 0;
}

结果如下: