荷兰国旗问题C++ !求解释

来源:百度知道 编辑:UC知道 时间:2024/05/22 14:15:44
在网上搜到一个算法 ,请高人解释一下;重点在星号部分,构造函数指针是怎样指向树组的。
原问题:
荷兰国旗问题:设有一个仅有红、白、蓝三种颜色的条块组成的条块序列,用一个时间复杂度为O(n)的算法,使得 这些条块按红、白、蓝的顺序排列,即排成荷兰国旗图案。

算法如下:
#include<iostream>
using namespace std;
void sortHL(int* a,int n)★
{
int j=0,k=0,i;//j记录有红色块数,k记录蓝色块数
for(i=0;i<n;i++)
{

if(a[i]==1)//蓝色
j++;
if(a[i]==2)//红色
k++;

}
for(i=0;i<=k-1;i++)//前k块为红色
a[i]=2;
for(i=k;i<=n-j;i++)//中间是白色
a[i]=0;
for(i=n-j;i<=n-1;i++)//后j块是蓝色
a[i]=1;
}
int main()
{
int a[]=;//原数组
int n=sizeof(a)/sizeof(int);//数组长度★
for(int i=0;i<n;i++)
cout<<a[i];
cout<<endl;
sortHL(a,n);
for(i=0;i<n;i++)
cout<<a[i];//输出排好的国旗
cout<<endl;
return 0;
}

这里没有构造函数呀,如果你说的是sortHL(int *a,int n)的话,int *a表示的就是数组a[]的意思,调用时sortHL(a,n)是将数组a的首地址传给了函数,即&a[0]。
函数做的事是直接统计出有多少个数是红,蓝,白,然后直接把原数组中的1到k个元素全改为红,n-j+1到n的j个元素全改为蓝,中间全改为白,就达到了要求。
不知道是不是帮你解决了问题。