排序演算法分析 快速排序

2021-08-29 12:34:29 字數 952 閱讀 8597

假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,

選擇中間位置的元素作為基準值(pivot value),其索引為( 0 + (n-1) ) / 2

從第0個元素開始從左往右找到比基準值大的元素,其索引為i從第n-1個元素開始從右往左找到比基準值小的元素,其索引為j交換這兩個元素

從索引i開始,繼續從左往右找到比基準值大的元素

從索引j開始,繼續從右往左找到比基準值小的元素

交換這2個元素

繼續查詢交換,直到i>j,即發生了相遇

根據ij這2個索引,把元素分成兩部分,即[0,j]和[i, n-1],然後在這兩個部分裡繼續進行步驟1~8的操作

ps:基準值不一定要選擇中間位置的元素,可以選擇任意位置的元素

void

quicksort

(int arr,

int left,

int right)

}//對[left, j]做快速排序

if(left < j)

quicksort

(arr, left, j)

;//對[i, right]做快速排序

if(right > i)

quicksort

(arr, i, right)

;}

注釋:

快速排序使用了分而治之的思想,設計比較巧妙。理解的關鍵就是弄清從左到右和從右到左兩個方向的查詢和交換,以及這2個方向的相遇點。

快速排序演算法分析

快速排序演算法 include include void quicksort int arr,int nleft,int nright i nleft j nright int nmid nleft nright 2 int nmidval arr nmid while i j from right...

快速排序演算法分析

經常在面試時會有面試官要求直接寫出快速排序演算法,因為該演算法在排序演算法中占有非常重要的地位,它排序效率高,達到o nlogn 最壞的情況也是o n 2 它的思想為對於乙個待排序的序列,首先隨機選取乙個元素作為樞軸,然後通過元素值的比較,將整個序列分成兩部分,前一部分所有元素都小於或等於該樞軸元素...

快速排序演算法分析

include stdafx.h void qsort int a,int low,int high printf s 呼叫qsort開始 n int first low intlast high int key a first 用字表的第乙個記錄作為樞軸 intm 1 while first la...