c語言的兩種排序方式(合併與快速)

2021-09-30 01:46:17 字數 1668 閱讀 9915

合併排序

//自定義型別

void

swap

(type *a, type *b)

intpartition

(type a,

int p,

int r)

//把初始值換到中間,滿足演算法的思想

a[p]

= a[j]

; a[j]

= x;

return j;

}void

sort

(type a,

int p,

int r)

}int

main()

;sort

(a,0

, n)

;for

(i =

0; i <= n; i++

)}t(n

)=o(1)&n\leq1\\t(n-1)+o(n)&n>1\end

t(n)

=while

(i < l)

//將左半部分剩餘元素置入父序列

a[k++

]= l[i++];

while

(j < r)

//將右半部分剩餘元素置入父序列

a[k++

]= r[j++];

}void

mergesort

(int a,

int n)

//合併排序的遞迴主體

}int

main

(void);

mergesort

(a,5);

int index =0;

printf

("a : ");

for(index =

0; index <

5; index++

)return0;

}非遞迴

#include

#include

void

mergesort

(int a,

int n)

step *=2

;//步長翻倍,即將原步長2倍個數的陣列元素作為有序子串行進行合併

t = p;

//t作為臨時指標變數,用於交換p和q的指標指向

p = q;

//將p指標指向經過一輪合併排序後的臨時陣列

q = t;

//將q指標指向原陣列}if

(a != p)

free

(temp);}

intmain

(void);

mergesort

(a,5);

int index =0;

printf

("a : ");

for(index =

0; index <

5; index++

)return0;

}

o(n

log⁡n)

o(n\log)

o(nlogn)

快速排序的兩種實現方式

從小 大排序 以首位元素作為基準元素 在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素 也就是首位元素所在的地方 然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當...

兩種快速排序

快排是一種基於交換的排序,氣泡排序 兩兩相鄰作比較,逆序則交換 也是基於交換的排序,快排運用了二分法的思想,每次找乙個哨兵,比哨兵小的放一邊,大的放一邊,這是完成了一趟快排。冒泡 for int i 0 ia j 1 快排一 void quicksort int left,int right if ...

快速排序的兩種實現

快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上c 實現 一 定軸法 1.備份對軸 首記錄 2.取兩個指標left和right,初始值分別是序列的第二個元素和最後乙個元素,並且left right ...