Quick Sort 快速排序的原理及實現

2022-05-04 16:21:07 字數 1343 閱讀 8340

原理:快速排序也是分治法思想的一種實現,他的思路是使陣列中的每個元素與基準值(pivot,通常是陣列的首個值,a[0])比較,陣列中比基準值小的放在基準值的左邊,形成左部;大的放在右邊,形成右部;接下來將左部和右部分別遞迴地執行上面的過程:選基準值,小的放在左邊,大的放在右邊。。。直到排序結束。

步驟:1.找基準值,設pivot = a[0] 

2.分割槽(partition):比基準值小的放左邊,大的放右邊,基準值(pivot)放左部與右部的之間。

3.進行左部(a[0] - a[pivot-1])的遞迴,以及右部(a[pivot+1] - a[n-1])的遞迴,重複上述步驟。

void quiksort(int arr, int length)

//low:陣列的左邊界值,開始為0

//high:陣列的右邊界值,開始為length-1

void quiksort(int arr, int low, int high)

int pivot = arr[low];

int i=low;

for(int j=low+1;j<=high;j++)}}

swap(arr[low],arr[i]);    //swap pivot to middle position

//進行分化(partition),遞迴

quiksort(arr,low,i-1);        //a[i] is the pivot now

quiksort(arr,i+1,high);

}void swap(int &a, int &b)

分割槽(partition)的演示:

快速排序 QuickSort

快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...

快速排序 quicksort

快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...

快速排序 QuickSort

1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...