122. 買賣股票的最佳時機 II&&738. 單調遞增的數字
阿新 • • 發佈:2020-12-16
快速排序-比較交換類排序
演算法複雜度:最好=O(nlog n) 最差=O(n2) 平均=O(nlog n)
演算法穩定性:不穩定
演算法思想:分而治之
#include <stdio.h>
void print_array(int *a, int len) {
for (int i = 0; i < len; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
int getIndex(int * a, int l, int r) {
int tmp = a[l]; //基準資料
while (l < r) {
while (l < r && a[r] >= tmp ) { //當隊尾元素大於等於基準資料時,向前挪動指標
r--;
}
a[l] = a[r]; //如果隊尾元素小於tmp,則賦值給l
while (l < r && a[l] < tmp) { //當隊首元素小於基準元素,向後移動指標
l++;
}
a[r] = a[l]; //隊首元素大於tmp,則賦值給r
}
a[l] = tmp;
return l;
}
void quickSort( int *a, int l, int r ) {
if ( l < r ) {
int i = getIndex(a, l, r);
quickSort(a, l, i-1); //左分治
quickSort(a, i+1, r); //右分治
}
}
int main() {
int a[7] = {1, 4, 2, 5, 6, 0, 9 };
print_array(a, 7);
quickSort(a, 0, 6);
print_array(a, 7);
}
/** 執行過程
1 4 2 5 6 0 9
0 1 2 4 5 6 9
*/