c语言关于快速排序
类似于excel表的排序。分主序和次序,主序相同的按次序排。struct Data { int a; int b;};定义"da \u0026lt; db": if (da.a \u0026lt;db.a || (da.a == db.a \u0026amp;\u0026amp; da.b \u0026lt; db.b)) //进行da \u0026lt; db相关操作
■网友
比如... (0, 5) (1, 4), (2, 3), (3, 2), (4, 1), (5, 0) 同时满足升序?
■网友
额。。好像C没有重载运算符哦。。记错了。。那就改一下好了用结构体表示二维数组呗#include \u0026lt;stdio.h\u0026gt;#include \u0026lt;stdlib.h\u0026gt;typedef struct point2d { int x, y; }point2d; int cmp(const void* lhs, const void* rhs) { point2d arg1 = *(const point2d*)lhs; point2d arg2 = *(const point2d*)rhs; if (arg1.x \u0026lt; arg2.x || arg1.x == arg2.x \u0026amp;\u0026amp; arg1.y \u0026lt; arg2.y) return -1; if (arg2.x \u0026lt; arg1.x || arg2.x == arg1.x \u0026amp;\u0026amp; arg2.y \u0026lt; arg1.y) return 1; return 0;} int main(){ point2d arr; for (int i = 0; i \u0026lt; 3; ++i) scanf("%d%d", \u0026amp;arr.x, \u0026amp;arr.y); qsort(arr, 3, sizeof(arr), cmp); for (int i = 0; i \u0026lt; 3; ++i) printf("(%d,%d)\", arr.x, arr.y);}
input:1 52 31 2
output:(1,2)(1,5)(2,3)
.
■网友
看你选哪个为主要素,哪个为次要素。先对主要素排序,主要素相同的再用次要素排序
■网友
如果你想要实现简单的话,可以先对第二个坐标进行排序,然后再对第一个坐标进行排序。当然,这样的时间复杂度要更大一些。或者你可以直接用比较的时候这么写(爪机打字的,见谅)假设用的是struct point { int x; int y;}伪代码:if(p.x\u0026gt;p.x) //交换else if(p.x==p.x \u0026amp;\u0026amp; p.y\u0026gt;p.y) //交换如果你会qsort的话,也是类似的比较。
■网友
题主,你如果明白几种排序方法的原理就能得出所有的排序本质是两两比较,然后交换位置的结论。不同的排序方法区别在于两个比较数的选择。快排是从两端向中间靠拢选择比较数,关键数是你任意选的。然后一轮比较排序完毕之后关键数将整个数组分为两段新数组,一段全部不小于关键数,另一段不大于关键数。递归比较排序新的数组可以得到排序完成的数组。以上是快排的排序思想,不涉及到排序完成后是升序还是降序。这是因为升序和降序取决于交换动作执行语句前的判断条件。(这一句是重点)你再看一下自己写的代码,看看那句判断条件,把它修改成降序(升序)。接着再看你提出的问题。本质上是主要因素和次要因素的问题。那么判断条件只需要修改为先比较第一个数,如果第一个数相等再判断第二个数。总结就是这个排序和排序方法是没有关系的,区别都在于判断条件。所以调用库函数时需要你自己写一个比较函数。
■网友
写一个struct然后写camp函数(用来比较两个struct的大小)然后用stdlib里面的qsort函数更新一下:std::sort函数的第三个参数就是外接一个比较函数,返回bool值的,用于比较大小或者使用基数排序,先对第二个数排再对第一个数排
■网友
没太看懂题主的意思
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 河北煤炭全链条快速抽检能力取得新突破研制仪器填补国内空白
- |看50岁老小区“返老还童”扬州老旧小区改造工程快速推进
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- |南通规划新一轮城市快速路网体系
- OC为何跌出语言榜前十
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据