快速排序分為經典快速排序和隨機快速排序,因為經典快速排序在工程上使用比較少,因此本文只將隨機快速排序,它可以看作是經典快速排序的公升級版本。
快速排序:
概述:(1) 先生成乙個隨機數,作為下標,此下標對應的元素作為劃分值。
(2) 將劃分值與元素末尾的數值進行交換,讓劃分值處於末尾。
(3) 然後用partition演算法,將小於劃分值的數放在左邊,等於劃分值的數放在中間,大於劃分值的數放在右邊,分為三部分。
partiton演算法三標準如下:
i) 當前數(index)《劃分值,小於區下乙個數和當前數交換,小於區向右擴乙個位置
ii) 當前數=劃分值,index++
iii) 當前數》劃分值,當前數和大於區前乙個數交換(交換是為了把當前數給大於區),大於區向左擴乙個位置,index原地不動。
原地不動是因為大於區前那個數交換到了當前數的位置,這個數還沒有進行判斷,所以不動,等待下一次判斷。
注意:此函式返回乙個兩個長度的陣列,儲存等於區的起始兩個index!!!這樣就能夠很好的處理接下來要進行的遞迴所需要的引數。
演算法穩定性:
不穩定演算法。
時間複雜度:
nlogn
**如下:
#include #includeusing
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...