快速排序2(演算法)

2021-10-03 18:47:13 字數 1329 閱讀 5121

快速排序

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 可以說是在所有交換排序中時間複雜度最低的乙個 但是在個別情況下也會達到和氣泡排序同等的時間複雜度,比如待排序的元素中用於排序的關鍵字全部相等,或者已經按照完全有序排列,這時候快速...