零崎的人间冒险Ⅳ
题目描述
在干掉了guangtou之后,无聊的零崎又去找事了……
说起来零崎前几周学到了一个叫做Apriori算法的东西,其第一步是挑出所有出现频率大于某个给定值的数据。然而作为一个具有一定程度的强(qiǎng )迫(pò)症的人,零崎显然希望先排个序再对其子集进行操作。
于是,现在的任务是简单的升序排列。
输入
多组输入数据,每组两行,第一行为一个整数n。第二行为n个整数。
输出
每组一行,输出n个整数的升序排列,两个整数之间用一个空格隔开。
输入样例
5
6 5 2 3 1
输出样例
1 2 3 5 6
题目解析
本题即考察快速排序,用快速排序就可以过。
注意点还是和往常一样:
- “>“与”>=“以及”<“与”<=“的区分
变量的初始化位置
反正粗心的我大多数有BUG基本都可以在以上两点中找到问题所在……
代码如下
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int n;
int Partition(int A[], int p, int r)
{
int i = p - 1;
int key = A[r];
for(int j = p; j <= r - 1; j++)
if(A[j] < key)
swap(A[++i], A[j]);
swap(A[++i], A[r]);
return i;
}
void QuickSort(int A[], int p, int r)
{
if(p < r)
{
int q = Partition(A, p, r);
QuickSort(A, p, q - 1);
QuickSort(A, q + 1, r);
}
}
int main()
{
int A[100010];
while(~scanf("%d", &n))
{
memset(A, 0, sizeof(A));
for(int i = 1; i <= n; i++)
scanf("%d", &A[i]);
QuickSort(A, 1, n);
for(int i = 1; i <= n; i++)
printf("%d ", A[i]);
printf("\n");
}
}