DS里介绍了各种狂拽酷炫的排序算法,但是都是基于单个元素,实际应用中对某条记录的某个字段来排序的情况层出不穷,如果还是原来的算法直接用的话,恐怕无济于事,
于是我想怎么根据某个字段来排序,当时学C++的时候qsort,一直都用这个排序,有个compare函数比较纠结,里面指针多,这个是排序的依据,在这里就有用了,如果你用sort估计是不行了,或者自己重写sort,比较的交换的时候改一改就好了。
基于这个目的,有了下面的toy代码,这样其他的都可以套了。但是如果是vector好像不行,我再看看怎么解决(vector解决了,用sort 也是带个比较函数的参数,见后一篇日志)
#include <iostream>
#include <vector>
using namespace std;
struct node
{
int val;
int val2;
};
int compare(const void*a, const void*b)
{
if(((node*)a)->val2>((node*)b)->val2) return 1;
if(((node*)a)->val2<((node*)b)->val2) return -1;
if(((node*)a)->val2==((node*)b)->val2) return 0;
}
int main()
{
node na[10];
vector<node> vec;
int num=10;
for(int i=0;i<num;i++)
{
node n;
n.val=i;n.val2=-i;
na[i]=n;
}
qsort(na,num,sizeof(node),compare);
return 0;
}