关于快速排序的几个注意事项
  • 板块学术版
  • 楼主ask_silently
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/7/18 18:10
  • 上次更新2023/10/27 19:41:01
查看原帖
关于快速排序的几个注意事项
690160
ask_silently楼主2022/7/18 18:10

大家第一次用sort的时候可能都会遇到一个自动建造的文件,不要慌,接下来我就给大家解释一下如何解决这个问题。 遇到这种问题大部分都是因为代码中有结构体(struct),这时候你用sort的时候就会蹦出一个文件,解决这种问题只需要一个bool类型的函数就行了。 bool函数里包括名字、参数和判断条件。bool后面是函数名,建议命名为cmp。在小括号里填的就是参数,参数类型和结构体类型是一致的。比如结构体是struct node(){},参数里填的就是node类型,也就是(node x,node y)。一般bool函数里参数有两个,因为需要两个数据进行比较,所以导入两个参数。 有了函数名和参数,接下来就该判断条件了。 举个栗子:

病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

1.老年人(年龄 >= 60岁)比非老年人优先看病。

2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。

3.非老年人按登记的先后顺序看病。

第1行,输入一个小于100的正整数,表示病人的个数;

后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。

按排好的看病顺序输出病人的ID,每行一个。 这道题就需要用到结构体与sort了。首先,定义一个结构体,里面包含病人的年龄与ID,还有一个编号(前后顺序)。然后输入数据,sort(a+1,a+1+n,cmp)。接下来就是bool函数了。先命名cmp,再传入两个参数,node x,node y(我的结构体类型是node),然后就是判断条件了,题目说了三个条件,第一个,老年人优先排队;第二个,老年人年龄相同时按先后顺序排序;第三个,非老年人按先后顺序排队。 其中,第一个和第二个可以合并在一起,按年龄大小排序,年龄相同按先后顺序。第三个单独提出。 判断条件就是如果x的年龄小于60且y的年龄也小于60,那么按照先后顺序排序,否则按照x和y的年龄谁大谁靠前。代码如下: bool cmp(node x,node y){ if(x.nian<60&&y.nian<60) return x.xu<y.xu; if(x.nian==y.nian) return x.xu<y.xu; return x.nian>y.nian; } (xu为顺序,nian为年龄)。 判断需要加上return,否则就会像我以前一样......报错x.nian>y.nian相当于哪个人的年龄大,哪个人在前;x.nian<y.nian这个就是哪个人的年龄小,哪个人在前。 好了,这就是快速排序(sort)的几个注意事项,你们学废了吗?

2022/7/18 18:10
加载中...