基於分治演算法的快速排序

2021-10-04 21:07:23 字數 646 閱讀 1205

#include

#include

#include

using

namespace std;

const

int maxn=

10010

;int a[maxn]

;int n;

//快排的思路是兩步:split+分治,我們不妨約定,陣列從1開始儲存有效數字

//第一步是split,目的是以陣列的第乙個元素為基準,將小於它的元素排到前面,大於它的元素排到後面

//返回值是基最後的位置

intsplit

(int low,

int high)

}swap

(a[low]

,a[i]);

int ans=i;

return ans;

}//quicksort實現的功能就是排序

void

quicksort

(int low,

int high)

}void

printn()

}int

main()

quicksort(1

,n);

printn()

;}

演算法 快速排序 基於分治思想的實現

今天看了 演算法導論 的快排部分,又更加理解了這個演算法 現在將它實現了,以後就直接用了 備註 主元 x 的選擇,可以採用隨機選擇,避免碰到輸入為接近排序的那種序列,防止時間複雜度下降到o n 2 include using namespace std 這個函式的作用是將陣列a從下標p到r這部分進行...

分治演算法 快速排序

一.演算法思想 假設要對某陣列進行由小 大排序 1 分解 對於亂序陣列a r 訪問範圍 0 r 有r 1個數 取乙個基準元素a p 一般以第乙個數即a 0 為基準 確定某個partition 位置 q 使a q 右邊的數都大於等於a p a q 左邊的數都小於等於a p 2 遞迴分治 分解之後,陣列...

快速排序 分治演算法

基於分治策略的排序在快速排序中,記錄的比較和交換是從兩端向中間進行的,關鍵字較大 小 的記錄一次就能交換到後 前 面單元,總的比較和移動次數較少。基本思想 對於輸入子陣列a p r 分解 以a p 為基準元素將a p r 劃分成三段a p q 1 a q 和a q 1 r 使得a p q 1 中任一...