[LeetCode] 荷兰国旗问题 Sort Colors
2013-01-30 13:30
405 查看
1. 荷兰国旗问题
类似问题:单链表快速排序Write a function that takes an array A and a beginning indexbeginand an ending indexendinto A, and rearranges the elements such that all elements less than A[begin] appear
first, followed by elements equal to A[begin], followed by elements greater than A[begin]. Your algorithm should have O(1) space complexity and O(end-begin) time complexity.
这个问题思路如下:
可以把数组分成四组:小于组(元素值小于A[begin]的部分),等于组(元素值等于A[begin]的部分),未分组(元素值有待和A[begin]比较的部分),大于组(元素值大于A[begin]的部分)。
具体代码如下. 下面的代码以数组的第一个元素为pivot元素,并且假设这个pivot元素的值是中值,既非最大值,亦非最小值,而是中值。请看本篇文章的第二个问题如何去掉这个假设。(注意:下面的代码可以用于quick
sort的partition函数)
int partition(int arr[], int s, int e) { // i: index to the first element in the middle section // j: index to the element just before the greater-than section // k: index to the first element of the uncompared section int i=s, j=e, k=s+1; while(k<=j) { if(arr[i]==arr[k]) k++; else if(arr[i]<arr[k]) swap(arr[k], arr[j--]); else if(arr[i]>arr[k]) swap(arr[i++],arr[k++]); } }
------------------------------------------------------
2. Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively. Note: Youare not suppose to use the library's sort function for this problem.
Follow up: A rather straight forward solution is a two-pass algorithm using counting sort. First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed
by 2's. Could you come up with an one-pass algorithm using only constant space?
可以借助荷兰国旗问题的算法,对0、1、2进行排序。
void sortColors(int arr[], int n) { // j: index to the element just before the greater-than section // k: index to the first element of the uncompared section int i=0, j=n-1, k=0; while(k<=j) { if(1==arr[k]) k++; else if(1<arr[k]) swap(arr[k], arr[j--]); else if(1>arr[k]) swap(arr[i++],arr[k++]); } }
相关文章推荐
- 查找排序实战---荷兰国旗问题(leetcode 75)
- 荷兰国旗问题/三色旗问题(Leetcode 75. Sort Colors)
- 【python】LeetCode | Sort Colors(荷兰国旗问题)
- LeetCode | Sort Colors(荷兰国旗问题)
- 荷兰国旗问题
- 45.荷兰国旗问题
- 荷兰国旗问题
- 算法初级02——荷兰国旗问题、随机快速排序、堆排序
- NYOJ_268_荷兰国旗问题
- ACM 荷兰国旗问题
- nyoj-268-荷兰国旗问题
- 【算法习作】荷兰国旗问题
- 荷兰国旗问题的算法实现
- 重新排列红蓝绿3色球 荷兰国旗问题
- 荷兰国旗问题 将3种数中重复数聚集 Sort Colors
- 75. Sort Colors(荷兰国旗问题 三指针)
- ACM268-荷兰国旗问题
- 算法初级02——荷兰国旗问题、随机快速排序、堆排序、桶排序、相邻两数的最大差值问题、工程中的综合排序算法
- 排序相关——荷兰国旗问题
- 荷兰国旗问题java