題目描述
利用快速排序算法將讀入的 NN 個數從小到大排序後輸出。
快速排序是信息學競賽的必備算法之一。對於快速排序不是很瞭解的同學可以自行上網查詢相關資料,掌握後獨立完成。(C++C++ 選手請不要試圖使用 STL
,雖然你可以使用 sort
一遍過,但是你並沒有掌握快速排序算法的精髓。)
輸入格式
第 11 行爲一個正整數 NN,第 22 行包含 NN 個空格隔開的正整數 a_iai,爲你需要進行排序的數,數據保證了 A_iAi 不超過 10^9109。
輸出格式
將給定的 NN 個數從小到大輸出,數之間空格隔開,行末換行且無空格。
輸入輸出樣例
輸入 #1複製
5 4 2 4 5 1
輸出 #1複製
1 2 4 4 5
說明/提示
對於 20\%20% 的數據,有 N\leq 10^3N≤103;
對於 100\%100% 的數據,有 N\leq 10^5N≤105。
【思路】
1 取數組中間位置的點.作爲標記數(防止快速排序相對有序的時候(毒瘤數據),時間複雜度退化成n方)。
2 從數組的左邊找到一個大於標記數的數, 從數據右邊找到一個小於標記數的數。
3 如果左邊找到的數的位置小於右邊找到數的位置, 交換兩個數據。
4 如果左邊的位置小於右邊的位置。從2開始重複執行。
5 如果第四步結束了,說明找到了一個位置, 這個位置左邊數都需要這個標記數, 右邊數的值都大於這個標記數。
6 按第5步找到的位置,分別對左右兩邊的數據進行快速排序。
【代碼】
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1