建设网站多久衡阳网站建设网站
news/
2025/9/29 7:09:05/
文章来源:
建设网站多久,衡阳网站建设网站,如何向百度提交网站,php论坛网站源码下载4.1 排序
4.1.1 选择排序
4.1.2 插入排序
4.1.3 排序与sort函数的应用
sort函数参数
sort(首元素地址,尾元素的下一个元素的地址,比较函数(cmp,非必填))如果不写比较函数,那默认对给定区间进行递增排序
如何实现比较函数
从基本数据类型、结构体类型、STL容器进行自定排…4.1 排序
4.1.1 选择排序
4.1.2 插入排序
4.1.3 排序与sort函数的应用
sort函数参数
sort(首元素地址,尾元素的下一个元素的地址,比较函数(cmp,非必填))如果不写比较函数,那默认对给定区间进行递增排序
如何实现比较函数
从基本数据类型、结构体类型、STL容器进行自定排序 (1)基本数据类型
如果不指定cmp函数则默认从小到大排序
#includecstdio.h
#includealgorithm
using namespace std;
int main(){int a[5]{3,1,4,2};sort(a,a4);for(int i 0;i4;i){printf(%d,a[i]);}return 0;
}如果逆序则,正序
#includecstdio.h
#includealgorithm
using namespace std;
bool cmp(int a,int b){return ab;//如果ab把a放b前面
}
int main(){int a[5]{3,1,4,2};sort(a,a4,cmp);for(int i 0;i4;i){printf(%d,a[i]);}return 0;
}(2)结构体数组
在 C 中如果你想对一个结构体数组进行排序并且需要自定义排序逻辑你可以通过定义一个比较函数 cmp 来实现。这个比较函数将基于结构体的一个或多个属性来决定排序的顺序。下面是一个示例展示如何对一个包含某些属性的结构体数组进行排序。
定义结构体
首先我们定义一个简单的结构体比如一个描述人的结构体包含姓名和年龄
#include iostream
#include algorithm
#include vectorstruct Person {std::string name;int age;
};自定义比较函数
接下来我们定义一个比较函数这个函数可以基于年龄进行排序
bool cmp(const Person a, const Person b) {return a.age b.age; // 升序排序
}或者如果你想要根据姓名的字典顺序进行降序排序可以这样写
bool cmp(const Person a, const Person b) {return a.name b.name; // 姓名的降序排序
}使用 sort 函数
最后你可以创建一个 Person 类型的数组或向量并使用 sort 函数与自定义比较函数来排序
int main() {std::vectorPerson people {{Alice, 30},{Bob, 25},{Charlie, 35}};// 根据年龄升序排序std::sort(people.begin(), people.end(), cmp);// 输出排序后的结果for (const auto person : people) {std::cout person.name is person.age years old.\n;}return 0;
}(3)综合应用
1.定义相关结构体
struct student{char name[10];char id[10];int score;int r;//排名
}stu[100000];2.cmp函数的编写
解释 按分数排序如果两个学生的分数不同 (a.score ! b.score)函数将根据分数的降序来比较学生。这意味着分数较高的学生将排在分数较低的学生之前。 按名字排序如果两个学生的分数相同那么 cmp 函数使用 strcmp 函数来比较他们的名字。strcmp 函数返回一个整数来表示两个字符串的比较结果 如果返回值小于 0表示第一个字符串在字典序中位于第二个字符串之前。如果返回值等于 0表示两个字符串相等。如果返回值大于 0表示第一个字符串在字典序中位于第二个字符串之后。
因此strcmp(a.name, b.name) 0 表示如果 a.name 在字典序中早于 b.name则应该返回 true即 a 应该在 b 前面。
bool cmp(Student a,Student b){if(a.score!b.score) return a.scoreb.score;else return strcmp(a.name,b.name)0;
}3.排名的实现
int r 1;
for(int i 0;in;i){if(i0stu[i].score!stu[i-1].score){r i1;}stu[i].r r;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921505.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!