1. 程式人生 > >零崎的人間冒險Ⅳ(快速排序)

零崎的人間冒險Ⅳ(快速排序)

零崎的人間冒險Ⅳ

題目描述

在幹掉了guangtou之後,無聊的零崎又去找事了……

說起來零崎前幾周學到了一個叫做Apriori演算法的東西,其第一步是挑出所有出現頻率大於某個給定值的資料。然而作為一個具有一定程度的強(qiǎng )迫(pò)症的人,零崎顯然希望先排個序再對其子集進行操作。

於是,現在的任務是簡單的升序排列。

輸入

多組輸入資料,每組兩行,第一行為一個整數n。第二行為n個整數。

輸出

每組一行,輸出n個整數的升序排列,兩個整數之間用一個空格隔開。

輸入樣例

5
6 5 2 3 1

輸出樣例

1 2 3 5 6

題目解析

本題即考察快速排序,用快速排序就可以過。
注意點還是和往常一樣:

  1. “>“與”>=“以及”<“與”<=“的區分
  2. 變數的初始化位置

    反正粗心的我大多數有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"); } }