基本排序之快速排序

2022-08-16 02:51:17 字數 1458 閱讀 9881

快速排序分為經典快速排序和隨機快速排序,因為經典快速排序在工程上使用比較少,因此本文只將隨機快速排序,它可以看作是經典快速排序的公升級版本。

快速排序:

概述:(1) 先生成乙個隨機數,作為下標,此下標對應的元素作為劃分值。

(2) 將劃分值與元素末尾的數值進行交換,讓劃分值處於末尾。

(3) 然後用partition演算法,將小於劃分值的數放在左邊,等於劃分值的數放在中間,大於劃分值的數放在右邊,分為三部分。

partiton演算法三標準如下:

i)   當前數(index)《劃分值,小於區下乙個數和當前數交換,小於區向右擴乙個位置

ii)   當前數=劃分值,index++

iii)  當前數》劃分值,當前數和大於區前乙個數交換(交換是為了把當前數給大於區),大於區向左擴乙個位置,index原地不動。

原地不動是因為大於區前那個數交換到了當前數的位置,這個數還沒有進行判斷,所以不動,等待下一次判斷。

注意:此函式返回乙個兩個長度的陣列,儲存等於區的起始兩個index!!!這樣就能夠很好的處理接下來要進行的遞迴所需要的引數。

演算法穩定性:

不穩定演算法。

時間複雜度:

nlogn

**如下:

#include #include 

using

namespace

std;

class

quicksort_

;void quicksort_::swap(int array, int a, int

b)void quicksort_::quicksort(int array,int

length)

void quicksort_::quicksort(int array, int l, int

r)

}int* quicksort_::partiton(int array, int l, int

r)

else

if (array[l] >array[r])

else

}swap(array, more, r);

result[

0] = less + 1

; result[

1] =more;

return

result;

}int

main()

; quicksort_ quick;

quick.quicksort(array,

10);

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

return0;

}

基本排序演算法之快速排序

快速排序演算法是一種劃分交換的方法,它採用分治法進行排序。其基本思想是 設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的 排序...

基本排序 快速排序

快速排序的基本思想 主題 快速排序 開發語言 c 開發環境 microsoft visual studio include int paritition int a,int i,int j void quicksort int a,int p,int r int main void quicksor...

基本排序演算法之3 快速排序quicksort

快排的思路就不說了,中軸分組,借助乙個臨時單元。時間複雜度o nlogn 下面是實現 includeusing namespace std templatebool less t a,t b a first temp qsort a,first,f qsort a last 1,n last 1,f...