基本排序系列之簡述快速排序,快速掌握快排

2021-06-22 10:34:45 字數 1458 閱讀 8952

快速排序

快速排序的演算法複雜度最大可達到o(n*n)但平均演算法複雜度為

o(n*logn),由於快排採用了分治法,挺好用的,而且排序效率相對其他幾種排序演算法效率更高。

快排採用的是一般取第乙個數為基準小的放在左邊,大的放在右邊,然後再對左邊的進行分治,再右邊的,按此下去達到排序的目的。

下面簡述快排的思想:

如:陣列a[5] =

以第乙個數a[0]即2為基準,指標i,j 分別從兩頭開始掃瞄直到找到小於key的數,否則從左邊開始掃瞄,定義乙個關鍵子key用來儲存基準數,如果找到則儲存在a[0]此時又空出了乙個位置此時從左邊掃瞄,掃瞄到的放到右邊的空位置。

此時key = 2

先從左邊開始掃瞄:

第一次:

22   4   5  1   6

第二次:2       1    4   5  1  6

從左邊掃瞄:

第三次:2       1    4    5   4    6

第四次:2       1    4    5   4    6

得到:[1]   2    [5    4     6]

因為左邊只有乙個數,所以只對右邊再次採取分治法:

此時以5 為基準數即key = 5;

得到:[4]  5  [6]

最後:[1]   2    [4]   [5]    [6]

**實現:

void qksort(int a,int low,int high)//low表示陣列的低位,high表示陣列的高位

int i = low;

int j = high;

int key = a[low];

//利用迴圈分治

while(i != j)

} for(;i != j;i++)

} }

a[i]=key;//將原取出的key值放回分界處

qksort(a,low,i-1);//遞迴呼叫

qksort(a,j+1,high);

}

全部**:

#include#includeusing namespace std;

//快速排序以遞迴實現的**

void qksort(int a,int low,int high)

int i = low;

int j = high;

int key = a[low];

while(i != j)

} for(;i != j;i++)

} }

a[i]=key;

qksort(a,low,i-1);

qksort(a,j+1,high);

}int main()

; qksort(a,0,4);

for(int i=0;i<5;i++)

{cout<

快速排序簡述

快排是不穩定的排序。複雜度介於nlogn n n 之間 均攤nlogn 當每次取值恰好能取到中位數時,複雜度最小,即為n logn。當每次取值取到極值時,當待排序資料的重複性很高時,時間複雜度最大,即為n n 對於無序資料,快排均攤複雜度為n logn 且常數係數很小,為八大排序中最快。快排的特性就...

基本排序之快速排序

快速排序分為經典快速排序和隨機快速排序,因為經典快速排序在工程上使用比較少,因此本文只將隨機快速排序,它可以看作是經典快速排序的公升級版本。快速排序 概述 1 先生成乙個隨機數,作為下標,此下標對應的元素作為劃分值。2 將劃分值與元素末尾的數值進行交換,讓劃分值處於末尾。3 然後用partition...

快速排序演算法簡述

快速排序在演算法具有重要的地位,每一位程式都應該了解,並且能夠熟練使用,以下最簡單遞迴實現方法 c include using namespace std void quicksort int num,int left,int right int main for i 0 i 5 i cout co...