[洛谷]P1177 【模板】快速排序

題目描述

利用快速排序算法將讀入的 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章