1,自定义数据类形PN,包括int ID,double x, double y ;以X从大到小及y从小到到排序。大约有五万个点左右,所以要求效率。
2,找出5万个字符串中,重复的项和重复的个数。就象数据库操作 Select a, count(a) from table group by a having count(a) > 1 的效果一样。同样要求高效
2,找出5万个字符串中,重复的项和重复的个数。就象数据库操作 Select a, count(a) from table group by a having count(a) > 1 的效果一样。同样要求高效
stl效率较高
2. 建议使用Hash算法对数据重新整理,字符串为Key加计数即可.
typedef struct _data{
int ID;
double x;
double y;
}DATA,*LPDATA;DATA R[50000];
int CompareData(DATA &a,DATA &b)
{
if (a.x>b.x)return 1;
if (a.x<b.x) {
return -1;
}
if (a.y<b.y)return 1;
if (a.y>b.y) {
return -1;
}
return 0;
}void Partition(const int nSize,const int nLo)
{
int Lo,Hi;
Hi=nSize;
Lo=nLo;
DATA Mid=R[(Lo+Hi)/2];
do
{
while(CompareData(R[Lo],Mid))
Lo++;
while(CompareData(Mid,R[Hi]))
Hi--;
if(Lo<=Hi)
{
DATA tmp = R[Lo];
R[Lo]=R[Hi];
R[Hi]=tmp;
Lo++;
Hi--;
}
}while(Lo<=Hi); if(Hi>nLo)
Partition(Hi,nLo);
if(Lo<nSize)
Partition(nSize,Lo);}
int CompareData(DATA &a,DATA &b)
{
if (a.x>b.x)return 1;
if (a.x<b.x) {
return 0;
}
if (a.y<b.y)return 1;
return 0;
}
{
if (p1->y > p2->y)
return true; if (p1->y < p2->y)
return false; if (p1->x > p2->x)
return false;
else
return true;
};