快速排序(雜記)

2021-09-24 06:14:49 字數 1654 閱讀 5843

ok,言歸正傳,現在就說快速排序。

// 快速排序

void

print

(int a[

], int n)

//輸出函式

cout<}void

swap

(int *a, int *b)

//交換函式

int partition

(int a[

], int low, int high)

//區間內排序

print

(a,10);

return low;

}void

quicksort

(int a[

], int low, int high)

//區間劃分

}

從最簡單的開始。兩個數如何排序?交換位置就可以了;三個數如何排序?一其中乙個為基點,於其他的數進行比較就ok了。那麼,我們可以把所有的排序歸攏到簡單問題嗎?這種思想在計算機裡被稱為分治法(超有用)。

簡述分治法,解釋起來就是 「大事化小,小事化了」 ,把複雜的問題變成簡單的問題,又點像遞迴,但是遞迴是有規律可循的,分治沒有。分治只需要簡單問題的解法,不需要知道簡單問題到複雜問題的規律。

分治需要大事化小,小事化了,所以需要分好區塊。想想對於每個數來說排序是什麼?就是小的在我左邊,大的在我右邊。所以我們先把第乙個數(arr[0])放到該去的位置,然後我們就會發現,陣列已經被分成兩個區了,乙個比arr[0]小,乙個比arr[0]大,以此類推,分別處理兩個區直到每個區只有三個數,然後用處理簡單問題的方式處理。

// 快速排序

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include<

set>

#include

using namespace std;

void

print

(int a[

], int n)

cout<}void

swap

(int *a, int *b)

int partition

(int a[

], int low, int high)

print

(a,10);

return low;

}void

quicksort

(int a[

], int low, int high)

}int main()

; cout<<

"初始值:"

;print

(a,10);

quicksort

(a,0,9

);cout<<

"結果:"

;print

(a,10);

}

快排的實用性不大,但是思想是很好的,建議學習時筆推一遍**,體會一下分割槽的感覺和方法。

遞迴 快速排序 快速排序

問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...

排序 快速排序

定義 在快速排序演算法中,使用了分治策略,將要排序的序列分成兩個子串行,然後遞迴地對子序列進行排序,直到整個序列排序完畢。步驟 1.在序列中選擇乙個關鍵元素作為軸 2.對序列進行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動到軸的後面。在進行劃分之後,軸便在它最終的位置上 3.遞迴地對兩個子...