QuickSort 快速排序

2021-07-25 02:40:30 字數 955 閱讀 9640

快速排序 - quicksort 

最壞情況是 o(n^2) , 平均是 o(n*logn) 但是儘管 堆排序的執行時間 是保證在 o(n*logn), 但是在實際中快速排序的執行時間往往是快於堆排序的。

快速排序也是in-place的排序。

原理:快速排序 的原理就是選定乙個點作為軸心點 - pivot, 初始是從 陣列的第乙個元素開始,一直到 倒數第二個元素,挨個與pivot的值進行比較,將小於或者等於pivot的值,換到當前走過的並且小於等於pivot的最近位置的下一位 ( 預設我們的開始索引位-1). 當到達倒數第二個元素後, 我們需要將 我們走過的離pivot最近的並且值小於等於pivot的元素的下一位 q-position 與pivot進行交換. 這個過程被稱為partition .  之後進行遞迴操作 - quicksort (array, start, q-position - 1);  quicksort(array, q-position + 1, end)

partition 的步驟

例如: 2, 8, 7, 1, 3, 5, 6, 4.   (pivot為4 - 我的程式中預設初始pivot為陣列中最後乙個值) 

將小於等於4的數進行交換,從2開始,2小於4,當前我們走過的離4最近的值的下一位與2進行交換 - (因為預設的索引為-1, 下一位的索引就是0 對應的值就是2),當前走到2,所以2不變, 繼續走

8,7 都不小於4, 當我們來到值1 的時候,滿足條件,將1 和 當前我們走過的,並且小於等於4的值的下一位進行交換,也就是8. 將 8 和 1交換 

交換之後的陣列位 2, 1, 7, 8, 3, 5, 6, 4.  重複 直到倒數第二個元素, 得到  2, 1, 3,  8, 7, 5, 6, 4

然後,需要將我們走過的離pivot最近並且小於等於pivot的元素的下一位與pivot進行交換得 2, 1, 3, 4, 7, 5, 6, 8

**實現的鏈結github

有問題歡迎指出!

快速排序 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 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...