您的位置:首页 > 其它

数组------荷兰国旗问题(颜色排序)

2016-05-17 14:22 323 查看
问题描述:

现在有红、白、蓝三色小球若干个,要求对其进行整理,使得同色小球相邻。

思路:

参照快速排序的过程,但使用三个指针first, current 和 end.其中first和current从数组头开始,end指向数组尾。以0表示红色,1表示白色,2表示蓝色。则有:

(1) 当*current = 0 时,swap(*current, *first) 并且first++、current++ ;

(2) 当*current = 1 时,current++;

(3) 当*current = 2 时,swap(*current, *end) 并且end–;

#include <iostream>
using namespace std;

void colorSort(int *arr, int first, int end);

int main()
{
int array[] = {0, 2, 2, 1, 1, 0, 0, 1, 2, 1, 2};

colorSort(array, 0, sizeof(array)/sizeof(int)-1);
cout << "after sort: " << endl;
for(int i = 0; i < sizeof(array)/sizeof(int); i++)
{
cout << array[i] << " ";
}
cout << endl;

return 0;
}

void colorSort(int *arr, int first, int end)
{
if(arr == NULL || first >= end)
return ;
int current = first;
while(current < end)
{
if(arr[current] == 0)
{
swap(arr[current], arr[first]);
current++;
first++;
}
else if(arr[current] == 1)
{
current++;
}
else
{
swap(arr[current], arr[end]);
end--;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: