零崎的人間冒險Ⅳ(快速排序)
阿新 • • 發佈:2019-02-14
零崎的人間冒險Ⅳ
題目描述
在幹掉了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");
}
}