sort的用法有哪些(sort的用法)
关于sort的用法有哪些,sort的用法这个很多人还不知道,今天菲菲来为大家解答以上的问题,现在让我们一起来看看吧!
1、sort函数的用法:做ACM题的时候,排序是一种经常要用到的操作。
2、如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。
3、STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。
4、使用这个函数,需要包含头文件。
5、 这个函数可以传两个参数或三个参数。
6、第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。
7、也就是说,排序的区间是[a,b)。
8、简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。
9、 拿我出的“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len); 对向量v排序也差不多,sort(v.begin(),v.end()); 排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。
10、 如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。
11、比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。
12、想把刚才的整数数组按降序排列,可以先定义一个比较函数cmpbool cmp(int a,int b){ return a>b;} 排序的时候就写sort(a,a+100,cmp); 假设自己定义了一个结构体nodestruct node{ int a; int b; double c;} 有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。
13、就可以写这样一个比较函数:以下是代码片段:bool cmp(node x,node y){ if(x.a!=y.a) return x.aif(x.b!=y.b) return x.b>y.b; return return x.c>y.c;} 排序时写sort(arr,a+100,cmp);qsort(s[0],n,sizeof(s[0]),cmp);int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二、对char类型数组排序(同int类型) char word[100]; Sample: int cmp( const void *a , const void *b ) { return *(char *)a - *(int *)b; } qsort(word,100,sizeof(word[0]),cmp); 三、对double类型数组排序(特别要注意) double in[100]; int cmp( const void *a , const void *b ) { return *(double *)a > *(double *)b ? 1 : -1; } qsort(in,100,sizeof(in[0]),cmp); 四、对结构体一级排序 struct In { double data; int other; }s[100] //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写 int cmp( const void *a ,const void *b) { return ((In *)a)->data - ((In *)b)->data ; } qsort(s,100,sizeof(s[0]),cmp); 五、对结构体 struct In { int x; int y; }s[100]; //按照x从小到大排序,当x相等时按照y从大到小排序 int cmp( const void *a , const void *b ) { struct In *c = (In *)a; struct In *d = (In *)b; if(c->x != d->x) return c->x - d->x; else return d->y - c->y; } qsort(s,100,sizeof(s[0]),cmp); 六、对字符串进行排序 struct In { int data; char str[100]; }s[100]; //按照结构体中字符串str的字典顺序排序 int cmp ( const void *a , const void *b ) { return strcmp( ((In *)a)->str , ((In *)b)->str ); } qsort(s,100,sizeof(s[0]),cmp); 七、计算几何中求凸包的cmp int cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序 { struct point *c=(point *)a; struct point *d=(point *)b; if( calc(*c,*d,p[1]) < 0) return 1; else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面 return 1; else return -1; }。
本文到此分享完毕,希望对大家有所帮助。
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
-
甘肃庆阳主推“三元双向”农业模式:黄土塬建“爱尔兰大棚”
2023年6月底,甘肃庆阳市宁县焦村镇西李村的双孢菇标准化生产加工基地,工作人员在大棚内采菇。 戴文昌 摄 中新网兰州7月3日电 (闫姣 [详细] -
“大唐荔乡”广东高州今年荔枝产销两旺 果农收入普增两成
高州桂味荔枝 梁盛 摄 中新网茂名7月3日电 (梁盛 梁晶晶)在大唐荔乡广东茂名高州市,一年一度的荔枝采收目前已全面结束。记者3日从 [详细] -
焕新美好生活 贝壳团装打造家装消费新模式
7月3日,贝壳团装在天津以品质团装津心筑家为主题举办媒体沟通会。贝壳团装首个项目落地天津金融街·南站金悦府,工艺样板间和实景样板间 [详细] -
深圳自驾路线查询
随着人们对自驾旅游的兴趣越来越浓厚,深圳的自驾游也越来越受欢迎。为了让广大自驾游爱好者能够更好地探索深圳的美景,今天我们将为大家介 [详细] -
成都太平洋百货:城市时尚新宠
成都是西南地区最具有时尚气息的城市之一,而在这个城市里,太平洋百货无疑是一道夺目的风景线。自从进驻成都以来,太平洋百货就成为了成都 [详细]