c語言實現快速排序

2021-07-05 03:57:20 字數 1271 閱讀 9610

快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。

步驟為:

從數列中挑出乙個元素,稱為"基準"(pivot),

重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。by the way,快速排序的時間複雜度為(nlogn).

下面為c語言**:

#include#define maxsize 100

struct datatype

;struct sqlist

;//尋找基準的放入位置

int partition(sqlist *l,int left,int right)

if(leftr[left] = l->r[right];

left++;

} //從左向右開始查詢第乙個大於哨點的數

while(leftr[left].data <= l->r[0].data)

if(leftr[right] = l->r[left];

right--;

} //測試或者便於理解使用**

/*printf("\n檢視該趟排序結果:\n");

for(int i=0;ilength;i++)

printf(" left=%d right=%d \n",left,right);

*/} //將基準送至準確的位置(左邊的數比它小,右邊的數比它大)

l->r[left] = l->r[0];

return left;

}//快速排序

有什麼意見或者建議,讀者可以給我說說,大家一塊進步。thanks.

C語言實現快速排序

快速排序,是氣泡排序的改進,通過尋找 中間元素 在一趟排序中,把比 中間元素 小的數放到左邊,比 中間元素 大的數放到右邊,如此遞迴,最終得到排序結果。include define num 5 void quick sort int a,int left,int right void swap in...

快速排序 C語言實現

以前使用rm時,ruby指令碼提供乙個sort函式,可以把陣列進行排序,後來得知採用的演算法是快速排序。隨著資料結構課程的學習,快速排序如今也不再神秘,如下 using namespace std void quicksort int a,int low,int high int first low...

C語言實現快速排序

快速排序 方法 從左邊開始找比基準值大的元素,從右邊找比基準值小的元素,交換兩個元素 缺點 如果所給元素序列為逆序的,那麼快速排序的時間複雜度很糟糕。長序列對遞迴排序來說不友好。時間複雜度 平均o nlogn 最壞o n 空間複雜度 最壞o n 穩定性 不穩定排序 int quicsort int ...