利用qsort函数对二维坐标进行排序

众所周知,qsort函数可以对数组进行大小排列,然而qsort同样也可以对二维坐标进行排列,那么如何实现将n个坐标(x,y)按照x从小到大,如果x相等再按照y的大小排列呢?

1:首先声明一个结构体point便于存储坐标:

利用qsort函数对二维坐标进行排序_第1张图片

2:为了便于输入坐标x和y以及在easyx上作出这个坐标,定义一个input函数,并传入坐标的数量n:利用qsort函数对二维坐标进行排序_第2张图片

然而在easyx上作点不利于观察,这里就用10像素的圆来代替 ,在输入坐标x和y的同时将其在easyx上作出

3:有输入便应该有输出,同理,定义一个函数output用以输出排序完后的坐标:

利用qsort函数对二维坐标进行排序_第3张图片

4:最重要的一步,对坐标进行比较大小,定义cmp(compare)函数 来比较两个元素大小,即回调函数:利用qsort函数对二维坐标进行排序_第4张图片

传入两个const void类型指针,然后将其强制转换为const struct point类型的指针,即我们需要用得到的,直接利用->取指针地址偏移后的成员变量名,然后比较x,x如果相等再比较y,x不相等继续比较x

5:输入要比较的坐标个数n,利用qsort(定义在stdlib.h数头里)函数对比较完的坐标进行排序:

利用qsort函数对二维坐标进行排序_第5张图片

最后运行结果:

利用qsort函数对二维坐标进行排序_第6张图片 

 

你可能感兴趣的:(几何学,算法,排序算法)