排序第七章:快速排序標準版

#define MAX_SIZE 10
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;
}
發佈了64 篇原創文章 · 獲贊 143 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章