sort的用法_sort的用法有哪些?(sort)
来源:网络 作者:格式无爱 更新 :2023-05-06 07:56
关于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; }。
sort- END -
矿泉水瓶盖是多少毫升(矿泉水瓶盖容量大约为5ML)
矿泉水瓶盖是多少毫升,矿泉水瓶盖容量大约为5ML。通常情况下,纯净水的瓶盖一盖的容量为5ML左右。而直径较大的瓶盖,如...
许随什么星座(人物、情节、环境是小说的三要素)
许随什么星座,许随是摩羯座。许随是小说《告白》里的人物,许随的生日是12月24日。《告白》是连载于晋江文学城的一部...
洋具(洋具指的是外国人的餐具)
洋具是什么意思,洋具指的是外国人的餐具。餐具根据国度分,双可分为中餐具与西餐具。中餐具就是一般中国人吃饭用的餐...
什么是姐妹数字(姐妹数字是一种用来表示数的书写符号)
什么是姐妹数字,姐妹数字是指两个有很多重复数字的号码或者连号的号码。在日常生活中,一些号码由于其本身数字构成的...
校内调剂还要复试吗
校内调剂还要复试吗,校内调剂也需要复试,调剂是初试后对考生做出的专业调换安排,不能代替复试。初试成绩出来之后,考生...
复眼的动物有哪些
蝗虫、2113蜜蜂、蜻蜓、苍蝇、蚊子等都是复眼5261动物。复眼是一种由不定数4102量的1653小眼组成。主要在昆虫及甲...
什么是长波紫外线和中波紫外线?
什么是长波紫外线和中波紫外线? ?yaru??回答了:长波紫外线和中波紫外线是在紫外线范围内的两种类别。长波紫外线的波...
任丘市是几线城市
任丘市是四线城市,是位于河北省沧州市中部的下辖县市。任丘市总面积有1012平方公里,是一个典型的平原地区,大陆性气候...
捉代表是什么生肖
捉代表是生肖蛇。生肖蛇一般指蛇。巳蛇,十二生肖之一,地支的第六位。蛇灵敏灵活,巳时蛇多隐蔽在草丛中。逢巳年出生的...
苹果14pro为什么比14重(苹果14pro比14重的原因)
苹果14pro为什么比14重,苹果14pro比14重的原因是iPhone 14 Pro采用不锈钢框架,使得它比标准的iPhone 14更重,标准款机...