由荷蘭國旗問題推導出的快排

2021-09-26 00:13:48 字數 1064 閱讀 8896

//快排引出的荷蘭國旗問題

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 ...