c語言 快速排序

2021-10-06 23:47:00 字數 1453 閱讀 3879

原理:

若序列中有n個元素,降低乙個資料作為支點,將它放在表中合適的位置。以支點為界,序列分成兩部分。

其中左邊資料小於等於支點,右邊資料大於等於支點。然後,對左右兩部分分別進行遞迴處理,直至排好序為止。

演算法:將至點放在合適的位置—劃分演算法

1.設兩個指標,i和j,開始分別指向表的開始與結束,某一時刻,支點或在a處(開始時),或在j處。

(1)支點在i處:若r[i]<=r[j],兩者位置合適,j減1;否則,兩者位置不合適,r[i]與r[j]對換,i加1;

(2)支點在j處:若r[i]<=r[j],兩者位置合適,i加1;否則,兩者位置不合適,r[i]與r[j]對換,j減1;

2.重複直到i與j相等。

注:(1)最好情況:(每次支點總是在中間) t(n)=o(nlog2n)。

(2)最壞情況:(資料已是遞增或遞減) t(n)=o(nn)。

所以說:快速排序在表已基本有序的情況下不合適。

#include

"stdio.h"

#define maxsize 100

typedef

struct

link;

void

swap

(link *a,

int i,

int j)

//完成數值之間的交換

intquasi

(link *a,

int low,

int high)

//這是核心步驟

return low;

//返回樞軸所在位置

}void

recursion

(link *a,

int low,

int high)

/*通過遞迴的方式,使支點左右兩端都有序*/

}void

quicksort

(link *a)

/*將輸入的順序表快速的排序,將順序表一分為二,

小的都在支點左側,大的都在支點右側,將第乙個資料作為支點*/

main()

printf

("未排序之前的陣列為:\t");

for(i=

1;i1;i++

)printf

("%d\t"

,a.r[i]);

quicksort

(&a)

;printf

("\n");

printf

("排序之後的陣列為:\t");

for(i=

1;i1;i++

)printf

("%d\t"

,a.r[i]);

printf

("\n");

}

執行之後:

快速排序C語言

就感覺,自己對這些個排序.至少,腦袋裡還沒有.哎,我老是不專心呢.加油吧.說說快速排序吧.這東西,原理就是不斷地將乙個陣列分成3部分.保持所有陣列處在這種狀態,最終完成排序.這些思想,還沒有掌握.加油吧,我還能說什麼?說些這個,呵呵.這段 起初不懂.後來,隨著不斷手工模擬,發現,採用了很多技巧.也難...

C語言 快速排序

1.快排是對氣泡排序的一種改進,在快速排序中,元素的比較和移動是從兩端向中間進行的,關鍵碼較大的元素一次就能從前面移動到後面,關鍵碼較小的元素一次就能從後面移動到前面,元素移動距離的較遠,從而減少了總的比較次數和移動次數 2.快速排序是基於分治法設計的,其分治策略是 劃分 選定乙個元素作為軸值,以軸...

快速排序 C語言

快速排序 基本思想是 1.分解 分為比基準元素小的 基準元素 比基準元素大的 三部分 2.遞迴求解 3.合併 include include define n 1000 define max 100 int a n void swap int i,int j int patition int p,i...