快速排序的應用 荷蘭國旗問題

2021-09-11 08:33:25 字數 776 閱讀 6020

題目描述:

荷蘭國旗有三橫條塊構成,自上到下的三條塊顏色依次為紅、白、藍。現有若干由紅、白、藍三種顏色的條塊序列,要將它們重新排列使所有相同顏色的條塊在一起。本問題要求將所有紅色的條塊放最左邊、所有白色的條塊放中間、所有藍色的條塊放最右邊。

題目中可以使用數字和顏色進行對應

red		=	0

white = 1

blue = 2

實現方式:快速排序,實現區間劃分。可以看下面我的這篇介紹

快排實現原理

**:

#includeusing namespace std;

vectorpatition(int a, int l, int r,int key)

else if(a[pos] > key)else

} equals.push_back(less+1);

equals.push_back(more-1);

return equals;

}void printarr(int arr,int len)

int main()

; int len = sizeof(arr)/sizeof(arr[0]);

printarr(arr,len);

printf("after change is: ");

vectorequals = patition(arr,0,len-1,1);

printarr(arr,len);

return 0;

}

荷蘭國旗問題 快速排序

目錄 一.荷蘭國旗 二.快速排序 亂序快排優化版 三.應用傳統快排求中位數 1.題目描述 給定乙個陣列arr和乙個數num,請把小於num的數放在陣列的左邊,等於num的數放在陣列的中間,大於num的數放在陣列的右邊。要求額外空間複雜度為o 1 時間複雜度為o n 2.分析思路 初始化less 1,...

荷蘭國旗問題,快速排序,隨機快速排序

荷蘭國旗問題 給定乙個陣列arr,和乙個數num,請把小於num的數放在陣列的 左邊,等於num的數放在陣列的中間,大於num的數放在陣列的 右邊。要求額外空間複雜度o 1 時間複雜度o n public static int partition int arr,int l,int r,int nu...

荷蘭國旗問題(快速排序初步思想)

給定乙個整數陣列,給定乙個值k,這個值在原陣列中一定存在,要求把陣列中小於k的元素放到陣列的左邊,大於k的元素放到陣列的右邊,等於k的元素放到陣列的中間,最終返回乙個整數陣列。例如 給定陣列 2,3,1,4,7,6,5,10,9 給定乙個值9,那麼經過處理後結果陣列是 2,3,1 4,7,6,5,9...