思路:

在一个数组中找到一个中间的值(最好取中间值)X

通过一次排序将比X小的放入左边,比X大的放右边

在对两段分别进行排序

void quick_sort(int q[],int l ,int r)
{
    if(l>=r) return;
    int x=q[(l+r+1)/2], i=l-1, j=r+1;
    while(i<j)
    {
         do i++; while(q[i]<x);
         do j--; while(q[j]>x);
         if(i<j) swap(q[i],q[j]);
    }         
    quick_sort(q,l,i-1);
    quick_sort(q,i,r);
}

 

leetcode-快速排序

 

代码:

#include<iostream>
using namespace std;
const int N=100000;
int n;
int q[N];

void quick_sort(int q[],int l,int r)
{
    if(l>=r) return;
    int x=q[(l+r+1)/2],i=l-1,j=r+1;
    while(i<j)
    {
        do i++;while(q[i]<x);
        do j--;while(q[j]>x);
        if(i<j) swap(q[i],q[j]);
    }
    quick_sort(q,l,i-1);
    quick_sort(q,i,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]);
    
    return 0;
    
}