明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2014|回复: 7

对三维数组进行排序,这段代码能否转化为vb.net的代码,急用!!!!

[复制链接]
发表于 2012-8-23 15:42:42 | 显示全部楼层 |阅读模式
对三维数组进行排序,x相等时比较y的大小,y相等时比较z的大小,用到qsort函数。
c语言代码

#include<stdio.h>
#include<stdlib.h>
struct str
{
int x;
int y;
int z;
}a[502];
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[0]),cmp);
for(i=0;i<n;i++)
printf("%d %d %d\n",a.x,a.y,a.z);
return 0;
}


}

发表于 2012-9-1 00:07:21 | 显示全部楼层
本帖最后由 chmenf087 于 2012-9-1 01:09 编辑

缺函数qsort,不过觉得代码有问题
发表于 2012-9-7 12:34:25 | 显示全部楼层
兄弟,你是在排序一列三维点,还是排序一个三维数组?如果是排序三维数组,麻烦你把排序的方式说清楚点,“x相等时比较y的大小,y相等时比较z的大小” 你这里说的x是什么?如果为索引值就没有排序之说,如果为数组存储的数值,指的是什么索引的值?
发表于 2012-9-7 18:28:04 | 显示全部楼层
那是C语言的一段经典代码。
发表于 2012-12-14 23:53:23 | 显示全部楼层
用linq,dim aa = from pt in ptlist orderby pt.x,pt.y,pt.z select pt
 楼主| 发表于 2014-10-18 22:53:35 | 显示全部楼层
  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
 楼主| 发表于 2014-10-18 22:55:24 | 显示全部楼层
哪位大师帮我把这段代码优化下, 想提高计算速度
 楼主| 发表于 2014-10-18 22:57:06 | 显示全部楼层
能否在排序的同时删除XY(不管Z)相同的点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 12:26 , Processed in 0.188087 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表