多点坐标排序算法
来源:互联网 发布:c语言数学要求高吗 编辑:程序博客网 时间:2024/05/11 17:35
最近做项目中需要一个对多点坐标进行排序的算法,最后终于得到了自己满意的算法,公布如下:
#include <stdio.h>#include <stdlib.h>
struct POINT
{
float x,y;
};
int pt_cmp(const void* val_l, const void* val_r)
{
POINT* left = (POINT*)val_l;
POINT* right = (POINT*)val_r;
if (left->x > right->x) //按x坐标排序。如果要按y坐标,则把pt_cmp函数中的x换成y
{
return 1;
}
else if (left->x == right->x)
{
if (left->y > right->y)
{
return 1;
}
else if (left->y == right->y)
{
return 0;
}
else
return -1;
}
return -1;
}
void Output(POINT* pArr, int nCnt)
{
for(int i=0; i<nCnt; i++)
{
printf("(%.2f, %.2f)\n", pArr[i].x, pArr[i].y);
}
printf("...........................................\n");
}
void sort(POINT* a,int n)
{
int i;
int j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
{
if(a[j].x>a[j+1].x)
{
POINT t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
else if(a[j].x==a[j+1].x)
{
if(a[j].y>a[j+1].y)
{
POINT t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main()
{
//(9,20.95)(1.25,6)(10,36)(27,8)(27,0.05)(27,1)
//(27,30)(90,110)(27.05,17.9)(90,3)(……)
POINT pt_arr[] = {{9, 20.95}, {1.25, 6}, {10, 36}, {27, 8}, {27, 0.05}, {27, 1}
, {27, 30}, {90, 110}, {27.05, 17.9}, {90, 3}};
Output(pt_arr, sizeof(pt_arr)/sizeof(POINT));
//qsort(pt_arr, sizeof(pt_arr)/sizeof(POINT), sizeof(POINT), pt_cmp);
sort(pt_arr, sizeof(pt_arr)/sizeof(POINT));
Output(pt_arr, sizeof(pt_arr)/sizeof(POINT));
}
经验证成功!
- 多点坐标排序算法
- 求多点的中心点坐标
- 求多点的中心点坐标
- Android单击屏幕获得坐标,屏幕多点触摸测试器
- 坐标点排序问题
- sort 对坐标 排序
- 坐标点排序
- 四边形坐标顺时针排序
- 二维坐标排序
- 简单的多点触控手势算法
- 坐标旋转(算法)
- Java算法---坐标移动
- 坐标下降优化算法
- 坐标上升/下降算法
- 坐标上升算法
- 坐标上升法算法
- POJ-1696 极坐标排序
- 刷清橙OJ--A1077.坐标排序
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread 与 _beginthreadex本质区别
- 用脚本链接目标文件
- 终于清楚了预编译语句
- 电脑硬件设备的注册表位置及如何获取GUDI号
- 师创作业--Bank Account Management System 银行账户管理系统 简称BAM
- 多点坐标排序算法
- 网页按钮启动应用程序
- VMA和LMA
- c#邮件发送
- Android给TextView,EditText等设置边框
- linux telnet
- 防止表单重复提交
- 搜索引擎最讨厌的seo做法
- 2.4 重新编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。