先上一手板子
int cmp(const void *a, const void * b)
{
int* c = *(int **)a;
int* d = *(int **)b;
return c[0] - d[0];//如果是第二个元素排序就是c[1]与d[1]l了
}
qsort(nums, numsSize, sizeof(int*),cmp);
含义:对于二维数组nums进行排序,基于第一个元素排序
好了,来做到题看看
这题easy,思路很简单,基于左端点从小到大排一把序
show show code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
/*定义一个结构体*/
typedef struct Stu{
char name[100];
char sex[10];
int age;
int score;
}stu;
/* 定义排序(回调)函数cmp:
返回类型必须是int;
两个参数的类型必须都是const void *;
如果是升序,那么就是如果a比b大返回一个正值,小则负值,相等返回0;
*/
int cmp(const void *a,const void *b){
/* *(stu*)a是因为:a是个void *类型,要先
用(stu*)将它转成stu*类型,然后再用*取值,
变成stu类型,才能比较大小。*/
stu c=*(stu*)a;
stu d=*(stu*)b;
//按成绩升序排序
return c.score-d.score;
}
main(){
int n;
stu sz[100];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s %s %d %d",&sz[i].name,&sz[i].sex,&sz[i].age,&sz[i].score);
}
/*
qsort函数参数:
1 待排序数组首地址;
2 数组中待排序元素数量;
3 各元素的占用空间大小,推荐使用sizeof(s[0])这样,特别是对结构体 ;
4 指向函数的指针,用于确定排序的顺序.
注意:如果要对数组进行部分排序,比如对一个s[n]的数组排列其从s[i]开始的m个元素,只需要
在第一个和第二个参数上进行一些修改:qsort(&s[i],m,sizeof(s[i]),cmp);
*/
qsort(sz,n,sizeof(sz[0]),cmp);
printf("\n按成绩升序为:\n\n");
for(int i=0;i<n;i++){
printf("%s %s %d %d\n",sz[i].name,sz[i].sex,sz[i].age,sz[i].score);
}
}
int cmp(const void *a, const void * b)
{
int* c = *(int **)a;
int* d = *(int **)b;
return c[0] - d[0];//如果是第二个元素排序就是c[1]与d[1]l了
}
int numberOfPoints(int** nums, int numsSize, int* numsColSize){
qsort(nums, numsSize, sizeof(int*),cmp);
int res = nums[0][1] - nums[0][0] + 1;
int right = nums[0][1];
for(int i = 1;i<numsSize;i++)
{
if(nums[i][0] > right)
{
res += nums[i][1] - nums[i][0] + 1;
right = nums[i][1];
}else if(nums[i][0] == right)
{
res += nums[i][1] - nums[i][0];
right = nums[i][1];
}else if(nums[i][1] > right)
{
res += nums[i][1] - right;
right = nums[i][1];
}else
{
continue;
}
}
return res;
}