合併排序
//自定義型別
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
logn)
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 ...