//快排引出的荷蘭國旗問題
void swap(int *a, int *b)
//乙個問題的寫法有很多,怎麼想就怎麼寫,結果都是一樣的
void func(int *a, int l, int r)
else if (a[l] < a[r])
else
}swap(&a[r], &a[more]);
}#includeint main()
; int c = sizeof(a) / sizeof(int);
func(a, 0, c-1);
for (int i = 0; i < c; ++i)
int b = ;
int d = sizeof(b) / sizeof(int);
func(b, 0, d - 1);
for (int i = 0; i < d; ++i)
return 0;
}
就是有一組數,把大於這個陣列最後乙個元素的數字放右邊,把小於最後乙個元素的數字放左邊,等於的放中間
再加上遞迴排序就可以完成快排了
#include#include#includevoid quitesort(int *a, int l, int r);
void swap(int *a, int *b)
int * func(int *a, int l, int r)
else if (a[l]>a[r])
else
}swap(&a[more], &a[r]);
printf("%d,%d\n", less+1, more);
return new int; }
void quitesort(int *a, int l, int r)
}int main()
; int c = sizeof(a) / sizeof(int);
quitesort(a, 0, c-1);
for (int i = 0; i < c; ++i)
return 0;
}
快排2 經典快排和荷蘭國旗快排
基礎知識見 建議先閱讀基礎知識,並自己手推一遍 演算法原理 第一步 取陣列最後乙個數作為num,將陣列中的 num的數放在陣列的左邊,num的數放在陣列的右邊,這是可以理解為分成了兩個陣列 第二步 然後將 num的部分當成乙個陣列,繼續第一步 num的部分同理 第三步 若陣列的大小 2,則結束。流程...
利用荷蘭國旗問題改進經典快排和隨機快排
每次取陣列中最後乙個值,依照這個值把陣列分為兩份,小於的在左邊,大於的在右邊。再依次按照這樣的思想進行操作。ps 荷蘭國旗問題可以看另一篇部落格 荷蘭國旗問題把陣列是分為三個部分的,小於 等於 大於這三個部分。按照這樣的思想,等於部分就不需要進行再次進行排序,這樣就能減少很大一部分的開銷。改進之後的...
快速排序的應用 荷蘭國旗問題
題目描述 荷蘭國旗有三橫條塊構成,自上到下的三條塊顏色依次為紅 白 藍。現有若干由紅 白 藍三種顏色的條塊序列,要將它們重新排列使所有相同顏色的條塊在一起。本問題要求將所有紅色的條塊放最左邊 所有白色的條塊放中間 所有藍色的條塊放最右邊。題目中可以使用數字和顏色進行對應 red 0 white 1 ...