快速排序演算法分析

2021-08-02 07:19:41 字數 2240 閱讀 8337

#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 < last)

a[first] = a[last];/*將比第乙個小的移到低端*/

while (first < last && a[first] <= key)

a[last] = a[first];

/*將比第乙個大的移到高階*/

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

printf_s("first:%d\t,last:%d\t", first, last);

printf_s("-----第%d次\n",m++);

}a[first] = key;/*樞軸記錄到位*/

printf_s("本次呼叫qsort結果\n:");

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

printf_s("\n呼叫qsort結束。\n\n");

qsort(a, low, first - 1);

qsort(a, first + 1, high);

}int main()

; qsort(a, 0, sizeof(a)/sizeof(a[0]) - 1);/*這裡原文第三個引數要減1否則記憶體越界*/

printf_s("排序結果:\n");

for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)

printf_s("\n");

return

0;}

first,last(1,8) —1

24 335952 72 28 965968 first,last(2,7) —2

24 33 28 52727296 59 68 first,last(4,5) —3

24 33 28 527272 96 59 68 first,last(4,4) —3

樞軸記錄到位後,本次呼叫qsort結果:

:24 33 28 525772 96 59 68

經過本次迴圈,key左邊的值都小於key,key右邊的值都大於key

下面分別再對57左右兩邊的資料呼叫qsort,遞迴;

上面的qsort是最終while (first < last)一次迴圈結束後才對最後這個a[first]賦值為key

:a[first] = key;/樞軸記錄到位/ //這句是把最終first所指的72換成初始時給的key值:57。

試著寫了下快速排序,如下,與上面的區別主要在:一次qsort呼叫中每次進行交換操作時,交換操作是否交換的徹底。

寫成下面這樣,每次交換操作時,都徹底交換值:

void qsort(int a, int low, int high)

int first = low;

intlast = high;

int numkey = first;

int key = a[numkey];

while(first < last)

a[numkey] = a[last];

a[last] = key;

numkey = last; //last與numkey所指的值交換後,numkey換成指last值。

while (a[first] <= key&&first < last) //從前往後找,找乙個大於key的

a[numkey] = a[first];

a[first] = key;

numkey = first; //first與numkey所指的值交換後, numkey換成指first值。

}qsort(a,low,numkey-1);

qsort(a,numkey+1,high);

}

numkey用來記錄當前key所在的位置。

–歡迎指正和補充!–

排序演算法分析 快速排序

假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,選擇中間位置的元素作為基準值 pivot value 其索引為 0 n 1 2 從第0個元素開始從左往右找到比基準值大的元素,其索引為i從第n 1個元素開始從右往左找到比基準值小的元素,其索引為j交換這兩個元素 從索引i...

快速排序演算法分析

快速排序演算法 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 它的思想為對於乙個待排序的序列,首先隨機選取乙個元素作為樞軸,然後通過元素值的比較,將整個序列分成兩部分,前一部分所有元素都小於或等於該樞軸元素...