c-按照输入的点,任意两个点的距离大小进行快速排序,怎么修改

问题描述

按照输入的点,任意两个点的距离大小进行快速排序,怎么修改

#include
#include
#include
#define M 10
typedef struct {
int x;
int y;
int z;
}Point[M];
double distance(int x,int y,int z,int x1,int y1,int z1)
{
return ((double)sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1)));

}
int f(const void c,const void *d)
{
return (
(int*)c- (int)d);
}
int main()
{
Point point;
int k,n;
int x1,y1,z1;
int i=0;
int j;
int t=0;
double sum[50];
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d%d%d",&x1,&y1,&z1);
point[i].x=x1;
point[i].y=y1;
point[i].z=z1;
i++;
}
for(j=0;j<i;j++)
{
for(k=j+1;k<i;k++)
{
sum[t]=distance(point[j].x,point[j].y,point[j].z,point[k].x,point[k].y,point[k].z);
}
}
qsort(sum,i,sizeof(int),f);
n=i;
for(i=0;i<n;i++)
printf("%lf ",sum[i]);
return 0;
}
快速排序函数qsort
不可以对双精度的数进行排序吗?
写成
qsort(sum,i,sizeof(double),f)
不可以吗?

解决方案

可以是可以,但是
int f(const void c,const void d)
{
return ((int
)c- (int)d);
}

这个你写错了
应该转换成double *

解决方案二:

 int f(const void * c,const void * d)
{
return *(double *)c - *(double *)d;
}
时间: 2024-07-29 07:09:44

c-按照输入的点,任意两个点的距离大小进行快速排序,怎么修改的相关文章

[华为机试练习题]54.判断任意两台计算机的IP地址是否属于同一子网络

题目 描述: 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据. 最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯.就这么简单. 请看以下示例: 运算演示之一: IP地址:192.168.0.1 子网掩码:255.255.255.0 AND运算 转化为二进制进行运算: IP地址:11010000.10101000.00000000.00000001 子网掩码:1111111

求任意两个节点之间有几条通路

问题描述 求任意两个节点之间有几条通路 输入一些二元组,二元组代表两个节点之间拥有一条通路,比如(a,b)表示a可以到达b,b也可以到达a.然后输入起始节点和目标节点,输出任何可能的路径.路径中不得包含回路. 输入示范 3 a,b a,c b,c a c 输出示范 abc ac 输入说明 第一行代表二元组的数量 然后是所有的二元组 第5行起始节点 第6行终止节点 用Java或者C#完成 解决方案 http://leaver.me/archives/2561.html 解决方案二: http://

c++问题-任意两篇英文文章,统计其相同单词数所占的百分比

问题描述 任意两篇英文文章,统计其相同单词数所占的百分比 文章1和2的文件名由用户输入.将两篇文章的相同单词,相同单词数量,相同单词在两篇文章的出现次数,相同单词分别在各自文章所占百分比,输出到屏幕,同时保存在一个单独的文件中 解决方案 首先强调下,你的算法有问题,单词相同占比不能说明文章雷同. 非要按照你做,你可以扫描两篇文章,构造字典树.然后可以得到一个全文单词和出现词频的排序,两者比较下就可以了. C#构造字典树的代码我分享过. 解决方案二: http://bbs.csdn.net/top

任意两个数相加求和

问题描述 用C#编写一个程序,实现任意两个数相加(取值范围可以超出double类型),用字符串实现 解决方案 解决方案二:现在有BigInteger还造轮子干什么...作业的话自己看书自己做,实在不会去google...解决方案三:窗体有2个textbox,分别是textbox1和textbox2,还有一个button1,以下是button事件的内容//代码没有判断文本框是否是数值,请读者自己判断//这是一个比较笨,也相对比较易懂的方法//应该还有其他方法的,暂时不写stringt1=this.

DirectX:函数可以连接任意两个filter

函数可以连接任意两个filter HRESULT ConnectFilters( IBaseFilter *pSrc, IBaseFilter *pDest ) { IPin *pIn = 0; IPin *pOut = 0; IEnumPins *pOutEnum; IEnumPins *pInEnum; PIN_DIRECTION ThisPinDir; HRESULT hr = pSrc->EnumPins( &pOutEnum ); hr = pDest->EnumPins(

T-SQL 2 Tips: 1.计算任意两日期之间的&amp;amp;quot;周一&amp;amp;quot;到&amp;amp;quot;周日&amp;amp;quot;分别各有几个! 2.根据出生..

这两个小技巧,不写不知道,一写吓一跳!都是看似简单,实际做起来就懵,得仔细想一想,才能写对!凡是有日期运算的程序都要细心哦! 先说第二个: 2.根据出生日期精确计算年龄!  所谓计算精确年龄就是: 生日差一天也不能长一岁!  大家常用,间隔年数算作年龄! 如果需求要精确,如: 保险 之类的,就粗了!  当然还可引申为根据入职日期计算精确的司龄,算加薪之类的需求!  我起初认为很简单,当年也写了好几遍才写对!高手们也被我晃点了数次几近晕倒!  不信有当年 2002-11-27 16:16:26 贴

[经典面试题][百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数。

题目 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置.如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置. 思路 这道题目最差时间复杂度也是O(N),所以重点在于能不能找到一种尽可能减少比较次数的方法. 如数组:[1,2,3,4,3,4,5,6,5],找到4在数组中的位置.4和1比较,差为3,那么即使最好情况(递增或者递减),4也就是在a[3]的位置,可以跳过a[1]a[2].这样在特定数组(目标值和a[1]相差很大)的情况下或许可以

JS触发方法事件,三个下拉框,其中任意两个有值,第三个改变时触发,

问题描述 JS触发方法事件,三个下拉框,其中任意两个有值,第三个改变时触发, JS触发方法事件,三个下拉框,其中任意两个有值,第三个改变时触发, 解决方案 3个select的事件都判断下是否都有值了,有了就执行相关代码 if(sel1.value!=''&&sel2.value!=''&&sel3.value!=''){ //..... } 解决方案二: JS改变input的value值不触发onchange事件解决方案 解决方案三: 你这是什么意思?任意两个有值?第三个改

任意两个多边形求并的算法并用编程实现

问题描述 任意两个多边形求并的算法并用编程实现 任意两个多边形求并的算法并用编程实现 任意两个多边形求并的算法并用编程实现 解决方案 求任意多边形的内点的算法 解决方案二: 不知道求并什么意思?是面积还是什么?面积的话两者相加减去更公共部分就可以了. 解决方案三: 不知道具体要求什么 ....