网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
下面是输出,可以看出,第一列升序,第一列相同第二列降序
1, 8,
2, 3,
5, 4,
5, 2,
6, 7,
6, 4,
对于通用算法,它的适用性很强,多维也是可以的,只要想好__comp
,这里直接用lambda即可
- 参数是两个一维数组,一般都是const引用,避免拷贝!!相当于第一次比较的是两个数组{5, 4}, {6, 4}
- 之后简单的写出比较方式,返回值是bool,不能在谓词写一些无关的语句,这里只有一个return表示比较方式。
2 C 二维数组第一列升序,第一列相同第二列降序
C语言库函数qsort也是可以的,它也可以使用二维或者高维,但是比较函数必须自己写
extern void qsort (void \*__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar);
- __base 表示待比较的数组首地址,当然就是数组名咯
- __nmemb 表示数组的第一维的大小,对于二维数组就是有多少行,
sizeof(v2) / sizeof(v2[0]),也就是6个
- __size 表示一个数组的大小,也就是每行的大小,
sizeof(v2[0]),也就是2个int大小的存储
- __compar比较方法,必须是如下形式
typedef int (\*__compar_fn_t) (const void \*, const void \*);
这是一个别名,对于函数指针的别名,直接去掉typedef(不像一般的别名书写的形式)
,如下,也就是__compar_fn_t表示两个const void*的形参,返回值是int的函数
。
int (\*__compar_fn_t) (const void \*, const void \*);
下面是一个案例
int cmp(const void\* a, const void\* b) {
return ((int\*)a)[0] == ((int\*)b)[0] ? ((int\*)b)[1] > ((int\*)a)[1] : ((int\*)a)[0] > ((int\*)b)[0];
}
int v2[6][2] = {{5, 4}, {6, 4}, {6, 7}, {2, 3}, {5, 2}, {1, 8}};
int hang = sizeof(v2) / sizeof(v2[0]);
qsort(v2, hang, sizeof(v2[0]), cmp);
int lie = sizeof(v2[0]) / sizeof(v2[0][0]);
for(int i = 0; i < hang; ++i){
for(int j = 0; j < lie; ++j) {
cout << v2[i][j] << ", ";
}
cout << '\n';
}
3 更一般的思路
struct node//结构体定义
{
int a;
int b;
int c;
};
bool cmp(node x,node y)//这个cmp是先按照a进行降序排序,如果a相同然后对b升序排序,如果b相同最后对c降序排序
{
if(x.a != y.a)
return x.a<y.a;
if(x.b != y.b)
return x.b>y.b;
if(x.c != y.c)
return x.c<y.c;
}
![img](https://img-blog.csdnimg.cn/img_convert/97b4175db1c2c20d28e61a207649245b.png)
![img](https://img-blog.csdnimg.cn/img_convert/470a1450c33303f4ae600dcdc7c74b3b.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
pics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**