1. 程式人生 > >SDUT-3398_數據結構實驗之排序一:一趟快排

SDUT-3398_數據結構實驗之排序一:一趟快排

範圍 一個 sort output stdlib.h pre 輸入數據 長整型 數據結構

數據結構實驗之排序一:一趟快排

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

給定N個長整型範圍內的整數,要求輸出以給定數據中第一個數為樞軸進行一趟快速排序之後的結果。

Input

連續輸入多組數據,每組輸入數據第一行給出正整數N(N < = 10^5),隨後給出N個長整型範圍內的整數,數字間以空格分隔。

Output

輸出一趟快速排序後的結果,數字間以一個空格間隔,行末不得有多余空格。

Sample Input

8
49 38 65 97 76 13 27 49

Sample Output

27 38 13 49 76 97 65 49

題解:上學期學的快排,只要排一次就可以了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[112345],n;

void sort(int l,int r)
{
    if(l>=r)
        return;
    int i = l,j = r;
    int x = a[l];
    while(i<j)
    {
        while(i<j&&a[j]>=x) j--;
        a[i] = a[j];
        while(i<j&&a[i]<=x) i++;
        a[j] = a[i];
    }
    a[i] = x;
}

int main()
{
    int i;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(0,n-1);
        for(i=0;i<n;i++)
            printf("%d%c",a[i],i==n-1?'\n':' ');
    }
    return 0;
}

SDUT-3398_數據結構實驗之排序一:一趟快排