// 快速排序演算法
#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 move to left
while ((arr[j] > nmidval) && (i < j))
if (i < j)
}nmid = j;
quicksort(arr, nleft, nmid);
quicksort(arr, nmid+1, nright);
}int main()
; int i = 0;
char c;
for (i = 0; i < 10; i++)
printf("\n\n");
quicksort(arrtest, 0, 9);
for (i = 0; i < 10; i++)
printf("\n\n");
scanf("%c", c);
return 0;
}
演算法分析:
時間複雜度
最好情況(每次總是選到中間值作樞軸)t(n)=o(nlogn)
最壞情況(每次總是選到最小或最大元素作樞軸)
做n-1趟,每趟比較n-i次,總的比較次數最大:[o(n2)] 退化為氣泡排序
平均時間複雜度為::t(n)=o(nlogn)
排序演算法分析 快速排序
假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,選擇中間位置的元素作為基準值 pivot value 其索引為 0 n 1 2 從第0個元素開始從左往右找到比基準值大的元素,其索引為i從第n 1個元素開始從右往左找到比基準值小的元素,其索引為j交換這兩個元素 從索引i...
快速排序演算法分析
經常在面試時會有面試官要求直接寫出快速排序演算法,因為該演算法在排序演算法中占有非常重要的地位,它排序效率高,達到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...