手写个快速排序

思路就是选择一个基准数字,然后把比这个数字大的放在他右边,小的放在他左边,直到区间内只剩下最后一个数为止,详细的还是去看大佬的吧,我只是写了一下。

代码:

#include
using namespace std;
const int maxn=10005;
int a[maxn];
int n;
void quicksort(int left, int right)
{
    int i, j, temp;
    if(left > right) return;
    temp = a[left];
    i = left;
    j = right;
    while(i != j)
    {
        while(a[j] >= temp && i < j) j--;
        while(a[i] <= temp && i < j) i++;
        if(i < j) swap(a[i],a[j]);
    }
    a[left] = a[i];
    a[i] = temp;
    quicksort(left, i - 1);
    quicksort(i + 1, right);
}
int main()
{
    while(scanf("%d", &n) &&n)
    {
        for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
        quicksort(1, n);
        for(int i = 1; i <= n; i++) printf("%d\n", a[i]);
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(排序)