typedef struct
{
int m[MAX_SIZE ];
int length;
} SqList;
//用排序,鐵定跑不了這個swap函數,最好自己寫一個
void swap(SqList *q, int i, int j);
void swap(SqList *q, int i, int j)
{
int temp = q->m[i];
q->m[i] = q->m[j];
q->m[j] = temp;
}
//快速排序標準版
//快速排序其實本質上就是前面第一章寫的冒泡排序的升級版本
//而且我現在寫的這個快速排序算法,被列爲20世紀十大算法之一,絕對值得我們這些玩編程的人,去花費工夫去了解它
//時間複雜度最優情況下是O(n * log n)
//最差情況下是O(N*N);
void QuickSort(SqList *L){
QSort(L, 1, L->length);
}
void QSort(SqList *L, int low, int high)
{
int pivot;
if (low < high)
{
pivot = Partition(L, low, high);//相當於找一個標稱值,或者說是樞軸,使他左邊的比他小,使他右邊的比他大!!!
QSort(L, low, pivot - 1);
QSort(L, pivot + 1, high);
}
}
int Partition(SqList *L, int low, int high)
{
int pivot = L->m[low];
while (low < high)
{
while (low < high && L->m[high] >= pivot)
{
high--;
}
swap(L, high, low);
while (low < high && L->m[low] <= pivot)
{
low++;
}
swap(L, low, high);
}
return low;
}