快排

题目:

 

思路: 

 代码实现:

#include<bits/stdc++.h>
using namespace std;

const int N = 1e6+10;

int n;
int q[N];

void quick_sort(int q[],int l,int r)
{
    if(l>=r) return ;

    int x= q[l],i=l,j=r;
    while(i<j)
    {
        while(i<j&&q[j]>=x)  //这里前面定义了x为q[i],故要从后面遍历,让后面的数值覆盖前面的q[i]
        {
            j--;
        }
        q[i]=q[j];
        while(i<j&&q[i]<=x)
        {
            i++;
        }
        q[j]=q[i];
    }
    q[i]=x;  //这里不要忘记将开始的分界点放回数组中

    quick_sort(q,l,i);
    quick_sort(q,j+1,r);

}

int main()
{

    scanf("%d",&n);
    for(int i =0;i<n;i++)
    {
        scanf("%d",&q[i]);
    }

    quick_sort(q,0,n-1);

    for(int i = 0; i<n;i++)
    {
        printf("%d",q[i]);
    }

}

 

posted @ 2025-04-14 15:17  小花护符  阅读(7)  评论(0)    收藏  举报