对三维数组进行排序,这段代码能否转化为vb.net的代码,急用!!!!
对三维数组进行排序,x相等时比较y的大小,y相等时比较z的大小,用到qsort函数。c语言代码
#include<stdio.h>
#include<stdlib.h>
struct str
{
int x;
int y;
int z;
}a;
int cmp(const void *p,const void *q)
{
str *c=(str *)p;
str *d=(str *)q;
if(c->x!=d->x)
return c->x-d->x;
else if(c->y!=d->y)
return c->y-d->y;
else
return c->z-d->z;
}
int main()
{
int n, i, j, k, t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d %d",&a.x,&a.y,&a.z);
qsort(a,n,sizeof(a),cmp);
for(i=0;i<n;i++)
printf("%d %d %d\n",a.x,a.y,a.z);
return 0;
}
}
本帖最后由 chmenf087 于 2012-9-1 01:09 编辑
缺函数qsort,不过觉得代码有问题 兄弟,你是在排序一列三维点,还是排序一个三维数组?如果是排序三维数组,麻烦你把排序的方式说清楚点,“x相等时比较y的大小,y相等时比较z的大小” 你这里说的x是什么?如果为索引值就没有排序之说,如果为数组存储的数值,指的是什么索引的值? 那是C语言的一段经典代码。 用linq,dim aa = from pt in ptlist orderby pt.x,pt.y,pt.z select pt n = listPoint1.Count
If n > 0 Then
'根据数据分断方向标识,对界内特征点数据排序
Select Case FXrect
Case "x"
Dim ptstmp = From pt In listPoint1 Select pt Order By pt.X, pt.Y
'//按x为主,y为辅的升序排列
listPoint1 = ptstmp.ToList()
Case "y"
Dim ptstmp = From pt In listPoint1 Select pt Order By pt.Y, pt.X
'//按y为主,x为辅的升序排列
listPoint1 = ptstmp.ToList()
End Select
'添加界内特征点(剔除XY坐标相同点)进总特征点集
For m = 0 To n - 1
If m = 0 Then
VerPoint.Add(listPoint1(m))
Else
If listPoint1(m).X <> listPoint1(m - 1).X Or listPoint1(m).Y <> listPoint1(m - 1).Y Then
VerPoint.Add(listPoint1(m))
End If
End If
Next
'listPoint1.Clear()
End If 哪位大师帮我把这段代码优化下, 想提高计算速度 能否在排序的同时删除XY(不管Z)相同的点?
页:
[1]