(第一篇博客…有点小激动哈哈哈)
今天在写克鲁斯卡尔算法的时候碰到了一个问题,就是如何快速将边(Edge)这一结构体按权重(weight)排序,结构体如下:
struct Edge {
int vex1; //起点
int vex2; //终点
int weight; //权重
};
百度后发现头文件#include<algorithm>
中有一个sort
函数, 里面包含三个参数
- 第一个是要排序的数组的起始地址
- 第二个是结束的地址(最后一位要排序的地址的下一地址)
- 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
在我这个问题中只要创建vector<Edge>
,然后自定义排序方法,就ok了。下面贴有关代码:
/*
自定义排序函数
*/
bool compare(const Edge &e1, const Edge &e2) {
return e1.weight < e2.weight; //权重从小到大排序
}
------------------------分割线
sort(e.begin(), e.end(), compare); //按边的权值从小到大排序