快速排序——一趟快排

数据结构实验之排序一:一趟快排

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

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

Hint

 

注:该题目只需要进行快速排序的一次步骤即可,不需要全部排出来;

还有一点就是该题需要用课本上的快排方法写~

这一段代码是经过修改原快排方式写的,很乱...但是满足课本内容的快排原理ac。

#include
#include
#include 
long long int a[100009],n;
void qs(int left, int right)
{
    int temp,i,t,j;
    if(left > right)return;
    i = left;j = right;
    temp = a[left];
    while(i != j)
    {
        while(a[j] >= temp && i 
/*********** 该代码为课本方式写的快排,与题意无关,仅供参考  **************/
#include

void qsort(int a[],int l, int r)
{
    int key = a[l], i = l,j = r;
    if(l > r)return;
    while(i < j)
    {
        while(i < j && a[j] >= key)j--;
        a[i] = a[j];
        while(i < j && a[i] <= key)i++;
        a[j] = a[i];
    }
    a[i] = key;
    qsort(a, l, i - 1);
    qsort(a, i + 1,r);
}
int main()
{
    int b,i,a[100001];
    while(~scanf("%d",&b))
    {
        for(i = 0; i < b; i++)
        {
            scanf("%d",&a[i]);
        }
        qsort(a, 0,b - 1);
        for(i = 0; i < b; i++)
        {
            if(i == b - 1)
                printf("%d\n",a[i]);
            else printf("%d ",a[i]);
        }
    }
    return 0;
}

 

你可能感兴趣的:(排序,数据结构)