快速排序
1.核心思想
2.思路
3.模板
4.例題
1.核心思想——分治
分治 :字面上的解釋是「分而治之」,就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併,這個技巧是很多高效演算法的基礎。
2.思路
(1)確定分界點:一般選q[l], q[(l+r)/2], q[r],也可隨機
(2)調整區間:確定乙個分界點x,使得所有左邊的數都小於等於x,所有右邊的數都大於等於x
調整區間方法一:(暴力的調整區間,時間複雜度o(n),思想上比較簡單,會浪費較多空間,但時間複雜度依然是線性的)
a->q , b -> q 先把a中的數放到q中,再把b中的數放到q中
調整區間方法二:(不用多開闢空間,使用雙指標,更優美完美)
(3)遞迴處理左右兩段內容 (先遞迴給左邊排序,再遞迴給右邊排序)
3.模板
void
quick_sort
(int q,
int l,
int r)
quick_sort
(q, l, j)
,quick_sort
(q, j +
1, r)
;}
4.例題
給定你乙個長度為n的整數數列。
請你使用快速排序對這個數列按照從小到大進行排序。
並將排好序的數列按順序輸出。
輸入格式
輸入共兩行,第一行包含整數 n。
第二行包含 n 個整數(所有整數均在1~109109範圍內),表示整個數列。
輸出格式
輸出共一行,包含 n 個整數,表示排好序的數列。
資料範圍
1≤n≤1000001≤n≤100000
輸入樣例:
53 1 2 4 5
輸出樣例:
1 2 3 4 5
ac**
#include
using
namespace std;
const
int n=
1e6+10;
int n;
int q[n]
;void
quick_sort
(int q,
int l,
int r)
quick_sort
(q,l,j)
;quick_sort
(q,j+
1,r);}
intmain()
排序演算法(2)快速排序
採用分治思想 1 從序列中挑出乙個元素作為 基準 privot 2 把所有比基準小的元素放在基準前面,把所有比基準大的元素放在基準後面,這個操作稱為 分割槽 3 對每個分割槽遞迴的進行 1 2 遞迴結束的條件是序列的大小是0或1 分類 內部比較排序 資料結構 陣列 最差時間複雜度 每次選取的基準都是...
快速排序演算法2
package com.mianshi describe 快速排序演算法2 排序結果從小到大 create on 2011 05 25 author sylor.liu version 1.0 since jdk1.6 public class quicksort2 對資料進行快速排序 privat...
排序演算法 2 快速排序 Quick Sort
相比於氣泡排序演算法,快速排序要快的多,一般情況下氣泡排序的時間複雜度是o n 而快速排序平均時間複雜度為o nlogn 可以說是在所有交換排序中時間複雜度最低的乙個 但是在個別情況下也會達到和氣泡排序同等的時間複雜度,比如待排序的元素中用於排序的關鍵字全部相等,或者已經按照完全有序排列,這時候快速...