sort是什么意思
sort是什么意思?
意思是:n. 种类;方式;品质。vi. 分类;协调;交往。vt. 将…分类;将…排序;挑选出某物。短语搭配:sort of 有几分地;到某种程度;稍稍。some sort of 某种的;多少有些;仿佛。sort out 挑选出。of sorts 各种各样的。that sort of thing 那类事情。sort 函数boolsort( array &array [, int sort_flags] )本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。注:本函数为 array中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。如果成功则返回TRUE,失败则返回FALSE。
sort是什么意思
sort:n. 种类;方式;品质;vi. 分类;协调;交往;vt. 将…分类;将…排序;挑选出某物。短语搭配:sort of 有几分地;到某种程度;稍稍;some sort of 某种的;多少有些;仿佛;sort out 挑选出;of sorts 各种各样的;that sort of thing 那类事情。That's a problem. He has sort of Dutch courage and that will egg him on in doing anything.这可是个问题,他在酒后逞能,什么事情都会做出来的。Could I try some of that jam? Jam? That blackberry jam. Oh, of course, darling. Actually, it's sort of a fish berry jam. It's called caviar.吃寿喜烧以前,来一点餐前甜点。我可以吃一点那个甜酱吗?甜酱?那个黑莓酱。哦,当然,亲爱的。事实上,这是一种鱼莓酱。它的名字叫鱼子酱。
sort函数的具体用法?
sort函数的用法(C++排序库函数的调用)\r\n对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。\r\n(一)为什么要用c++标准库里的排序函数\r\nSort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!\r\n(二)c++标准库里的排序函数的使用方法\r\nI)Sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!\r\nII)Sort函数有三个参数:\r\n(1)第一个是要排序的数组的起始地址。\r\n(2)第二个是结束的地址(最后一位要排序的地址的下一地址)\r\n(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。\r\nSort函数使用模板:\r\nSort(start,end,排序方法)\r\n下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!\r\n例:sort函数没有第三个参数,实现的是从小到大\r\n#include\r\n#include\r\nusing namespace std;\r\nint main()\r\n{\r\nint a[10]={9,6,3,8,5,2,7,4,1,0};\r\nfor(int i=0;i<10;i++)\r\ncout<<a[i]<<endl;\r\nsort(a,a+10);\r\nfor(int i=0;i<10;i++)\r\ncout<<a[i]<<endl;\r\nreturn 0;\r\n}
c语言中sort的用法详解
c语言的学习很多是比较复杂的,那么c语言中sort的用法的用法你知道吗?下面我就跟你们详细介绍下c语言中sort的用法的用法,希望对你们有用。 c语言中sort的用法的用法 sort是STL中提供的算法,头文件为#include以及using namespace std; 函数原型如下: ? 1 2 3 4 5 template void sort ( RandomAccessIterator first, RandomAccessIterator last ); template void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp ); 使用第一个版本是对[first,last)进行升序排序,默认操作符为""则为降序排序,分别对int、float、char以及结构体排序例子如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #include #include #include using namespace std; struct product{ char name[16]; float price; }; int array_int[5]={4,1,2,5,3}; char array_char[5]={'a','c','b','e','d'}; double array_double[5]={1.2,2.3,5.2,4.6,3.5}; //结构比较函数(按照结构中的浮点数值进行排序) bool compare_struct_float(const product &a,const product &b){ return a.price<b.price; } //结构比较函数(按照结构中的字符串进行排序) bool compare_struct_str(const product &a,const product &b){ return string(a.name)<string(b.name); } //打印函数 void print_int(const int* a,int length){ printf("升序排序后的int数组:\n"); for(int i=0; i<length-1; i++) printf("%d ",a[i]); printf("%d\n",a[length-1]); } void print_char(const char* a,int length){ printf("升序排序后的char数组:\n"); for(int i=0; i<length-1; i++) printf("%c ",a[i]); printf("%c\n",a[length-1]); } void print_double(const double* a,int length){ printf("升序排序后的dobule数组:\n"); for(int i=0; i<length-1; i++) printf("%.2f ",a[i]); printf("%.2f\n",a[length-1]); } void print_struct_array(struct product *array, int length) { for(int i=0; i<length; i++) printf("[ name: %s \t price: $%.2f ]\n", array[i].name, array[i].price); puts("--"); } void main() { struct product structs[] = {{"mp3 player", 299.0f}, {"plasma tv", 2200.0f}, {"notebook", 1300.0f}, {"smartphone", 499.99f}, {"dvd player", 150.0f}, {"matches", 0.2f }}; //整数排序 sort(array_int,array_int+5); print_int(array_int,5); //字符排序 sort(array_char,array_char+5); print_char(array_char,5); //浮点排序 sort(array_double,array_double+5); print_double(array_double,5); //结构中浮点排序 int len = sizeof(structs)/sizeof(struct product); sort(structs,structs+len,compare_struct_float); printf("按结构中float升序排序后的struct数组:\n"); print_struct_array(structs, len); //结构中字符串排序 sort(structs,structs+len,compare_struct_str); printf("按结构中字符串升序排序后的struct数组:\n"); print_struct_array(structs, len); } sort函数的用法 做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。 拿我出的“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len); 对向量v排序也差不多,sort(v.begin(),v.end()); 排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。 如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp ? 1 2 3 4 bool cmp(int a,int b) { return a>b; } 排序的时候就写sort(a,a+100,cmp); 假设自己定义了一个结构体node ? 1 2 3 4 5 struct node{ int a; int b; double c; } 有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写这样一个比较函数: 以下是代码片段: ? 1 2 3 4 5 6 bool cmp(node x,node y) { if(x.a!=y.a) return x.a if(x.b!=y.b) return x.b>y.b; return return x.c>y.c; } 排序时写sort(arr,a+100,cmp); ? 1 2 3 4 5 qsort(s[0],n,sizeof(s[0]),cmp); int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } sort函数的用法:对int类型数组排序 ? 1 2 3 4 5 6 7 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); sort函数的用法:对char类型数组排序(同int类型) ? 1 2 3 4 5 6 7 char word[100]; Sample: int cmp( const void *a , const void *b ) { return *(char *)a - *(int *)b; } qsort(word,100,sizeof(word[0]),cmp); sort函数的用法:对double类型数组排序(特别要注意) ? 1 2 3 4 5 6 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); sort函数的用法:对结构体一级排序 ? 1 2 3 4 5 6 7 8 9 10 11 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); sort函数的用法:对结构体 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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); sort函数的用法:对字符串进行排序 ? 1 2 3 4 5 6 7 8 9 10 11 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); sort函数的用法:计算几何中求凸包的cmp ? 1 2 3 4 5 6 7 8 9 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) x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面 return 1; else return -1; } 猜你喜欢: 1. c中的用法 2. c语言中逻辑或的用法 3. c语言strcmp的用法 4. c语言中free的用法 5. c语言pow的用法 6. c语言中putchar的用法
sort的用法和短语例句
【篇一】sort的用法 sort的用法1:sort的基本意思是指按照某人〔物〕的特征和属性进行分类、分级,使其更加整齐与完整。 sort的用法2:sort可用作及物动词,也可用作不及物动词。用作及物动词时,接名词或代词作宾语; 用作不及物动词时,常与副词out连用表示“整理”“解决”,有筛选的意味。 sort的用法3:sort用作名词时可作“种类,类别”解,指有相似性质或特征的事物所形成的种类,常接介词 of。sort of后的可数名词多为单数形式,有时也可为复数形式,当sort of sb/sth 用作主语时,谓语动词的数随sb/sth 而变化。 sort的用法4:sort也可作“某一类人”解,一般用作单数。 sort的用法5:在谈话中人们常可在名词前使用sort of表示某物具有某类特殊东西的一些特征。sort of也可置于形容词、动词或其他词类前,使听起来不太肯定,意思是“有几分,近似,有那么点儿”。 【篇二】sort的常用短语 用作动词 (v.) sort out (v.+adv.) sort through (v.+prep.) sort with (v.+prep.) 用作名词 (n.) out of sorts of sorts〔of a sort〕 【篇三】sort的用法例句 1. I really feel aggrieved at this sort of thing. 我真为这种事感到委屈。 2. You can't put that sort of fear into words. 那种恐惧无法用语言表达。 3. Just how much kneading is required depends on the sort of flour. 需要揉多久取决于用哪种面。 4. Why don't you come home with me until you sort things out? 你何不先和我一起回家,等事情解决了再走? 5. Minorca is the sort of place that caters for families. 梅诺卡岛是那种适合家庭旅游的地方。 6. He's American-bred, with a sort of Irish background somewhere along the line. 他出生在美国,家族的血统里有一部分爱尔兰血统。 7. He would sort out his own problems, in time. 他早晚会解决自己的问题。 8. I'm sure it was just some sort of mix-up. 我相信这只不过是一次失误。 9. They were two of a kind, from the same sort of background. 他们俩是一类人,有相同的背景。 10. Any sort of wrong-doing had to be rooted out. 必须杜绝任何不道德的事发生。 11. That's just the sort of abuse that he will be investigating. 他要调查的正是这一类虐待行为。 12. I have to sort some things out. We really needed to talk. 我必须把一些事情搞清楚。我们真的需要谈一谈。 13. There's a nasty sort of rumour going around about it. 关于这件事正有一则恶意的谣言在流传。 14. List the key headings and sort them into a logical order. 列出关键标题并按逻辑顺序排列。 15. That sort of romantic attitude cuts no ice with money-men. 那种不切实际的态度对金融家们根本不起什么作用。
sort排序命令怎么使用
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。下面跟着我一起来了解一下吧。 sort排序命令怎么使用 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 [rocrocket@rocrocket programming]$ cat seq.txt banana apple pear orange [rocrocket@rocrocket programming]$ sort seq.txt apple banana orange pear 2 sort的-u选项 它的作用很简单,就是在输出行中去除重复行。 [rocrocket@rocrocket programming]$ cat seq.txt banana apple pear orange pear [rocrocket@rocrocket programming]$ sort seq.txt apple banana orange pear pear [rocrocket@rocrocket programming]$ sort -u seq.txt apple banana orange pear pear由于重复被-u选项无情的删除了。 3 sort的-r选项 sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。 [rocrocket@rocrocket programming]$ cat number.txt 1 3 5 2 4 [rocrocket@rocrocket programming]$ sort number.txt 1 2 3 4 5 [rocrocket@rocrocket programming]$ sort -r number.txt 5 4 3 2 1 4 sort的-o选项 由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。 但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。 [rocrocket@rocrocket programming]$ sort -r number.txt > number.txt [rocrocket@rocrocket programming]$ cat number.txt [rocrocket@rocrocket programming]$ 看,竟然将number清空了。 就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。 [rocrocket@rocrocket programming]$ cat number.txt 1 3 5 2 4 [rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt [rocrocket@rocrocket programming]$ cat number.txt 5 4 3 2 1 5 sort的-n选项 你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。 我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”! [rocrocket@rocrocket programming]$ cat number.txt 1 10 19 11 2 5 [rocrocket@rocrocket programming]$ sort number.txt 1 10 11 19 2 5 [rocrocket@rocrocket programming]$ sort -n number.txt 1 2 5 10 11 19 6 sort的-t选项和-k选项 如果有一个文件的内容是这样: [rocrocket@rocrocket programming]$ cat facebook.txt banana:30:5.5 apple:10:2.5 pear:90:2.3 orange:20:3.4 这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。 那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现? 幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~) 指定了间隔符之后,就可以用-k来指定列数了。 [rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt apple:10:2.5 orange:20:3.4 banana:30:5.5 pear:90:2.3 我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。 7 其他的sort常用选项 -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写 -c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1 -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1 -M会以月份来排序,比如JAN小于FEB等等 -b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。 有时候学习脚本,你会发现sort命令后面跟了一堆类似-k1,2,或者-k1.2 -k3.4的东东,有些匪夷所思。今天,我们就来搞定它—-k选项! 1 准备素材 $ cat facebook.txt google 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500 第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。(除了公司名称,其他的别信,都瞎写的^_^) 2 我想让这个文件按公司的字母顺序排序,也就是按第一个域进行排序:(这个facebook.txt文件有三个域) $ sort -t ‘ ‘ -k 1 facebook.txt baidu 100 5000 google 110 5000 guge 50 3000 sohu 100 4500 看到了吧,就直接用-k 1设定就可以了。(其实此处并不严格,稍后你就会知道) 3 我想让facebook.txt按照公司人数排序 $ sort -n -t ‘ ‘ -k 2 facebook.txt guge 50 3000 baidu 100 5000 sohu 100 4500 google 110 5000 不用解释,我相信你能懂。 但是,此处出现了问题,那就是baidu和sohu的公司人数相同,都是100人,这个时候怎么办呢?按照默认规矩,是从第一个域开始进行升序排序,因此baidu排在了sohu前面。 4 我想让facebook.txt按照公司人数排序 ,人数相同的按照员工平均工资升序排序: $ sort -n -t ‘ ‘ -k 2 -k 3 facebook.txt guge 50 3000 sohu 100 4500 baidu 100 5000 google 110 5000 看,我们加了一个-k2 -k3就解决了问题。对滴,sort支持这种设定,就是说设定域排序的优先级,先以第2个域进行排序,如果相同,再以第3个域进行排序。(如果你愿意,可以一直这么写下去,设定很多个排序优先级) 5 我想让facebook.txt按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序:(这个有点难度喽) $ sort -n -t ‘ ‘ -k 3r -k 2 facebook.txt baidu 100 5000 google 110 5000 sohu 100 4500 guge 50 3000 此处有使用了一些小技巧,你仔细看看,在-k 3后面偷偷加上了一个小写字母r。你想想,再结合我们上一篇 文章 ,能得到答案么?揭晓:r和-r选项的作用是一样的,就是表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧: $ sort -t ‘ ‘ -k 3nr -k 2n facebook.txt baidu 100 5000 google 110 5000 sohu 100 4500 guge 50 3000 看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。 6 -k选项的具体语法格式 要继续往下深入的话,就不得不来点理论知识。你需要了解-k选项的语法格式,如下: [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ] 这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。 先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。 Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点 说说 Start部分的FStart和C.Start。 C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。 FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。 同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。 7 突发奇想,从公司英文名称的第二个字母开始进行排序: $ sort -t ‘ ‘ -k 1.2 facebook.txt baidu 100 5000 sohu 100 4500 google 110 5000 guge 50 3000 看,我们使用了-k 1.2,这就表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。 8 又突发奇想,,只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序: $ sort -t ‘ ‘ -k 1.2,1.2 -k 3,3nr facebook.txt baidu 100 5000 google 110 5000 sohu 100 4500 guge 50 3000 由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。 9 在modifier部分还可以用到哪些选项? 可以用到b、d、f、i、n 或 r。 其中n和r你肯定已经很熟悉了。 b表示忽略本域的签到空白符号。 d表示对本域按照字典顺序排序(即,只考虑空白和字母)。 f表示对本域忽略大小写进行排序。 i表示忽略“不可打印字符”,只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如\a是报警,\b是退格,\n是换行,\r是回车等等) 10 思考思考关于-k和-u联合使用的例子: $ cat facebook.txt google 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500 这是最原始的facebook.txt文件。 $ sort -n -k 2 facebook.txt guge 50 3000 baidu 100 5000 sohu 100 4500 google 110 5000 $ sort -n -k 2 -u facebook.txt guge 50 3000 baidu 100 5000 google 110 5000 当设定以公司员工域进行数值排序,然后加-u后,sohu一行就被删除了!原来-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。 $ sort -k 1 -u facebook.txt baidu 100 5000 google 110 5000 guge 50 3000 sohu 100 4500 $ sort -k 1.1,1.1 -u facebook.txt baidu 100 5000 google 110 5000 sohu 100 4500 这个例子也同理,开头字符是g的guge就没有幸免于难。 $ sort -n -k 2 -k 3 -u facebook.txt guge 50 3000 sohu 100 4500 baidu 100 5000 google 110 5000 咦!这里设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的:)(不信,你可以自己加一行sina 100 4500试试看) 11 最诡异的排序: $ sort -n -k 2.2,3.1 facebook.txt guge 50 3000 baidu 100 5000 sohu 100 4500 google 110 5000 以第二个域的第二个字符开始到第三个域的第一个字符结束的部分进行排序。 第一行,会提取0 3,第二行提取00 5,第三行提取00 4,第四行提取10 5。 又因为sort认为0小于00小于000小于0000…. 因此0 3肯定是在第一个。10 5肯定是在最后一个。但为什么00 5却在00 4前面呢?(你可以自己做实验思考一下。) 答案揭晓:原来“跨域的设定是个假象”,sort只会比较第二个域的第二个字符到第二个域的最后一个字符的部分,而不会把第三个域的开头字符纳入比较范围。当发现00和00相同时,sort就会自动比较第一个域去了。当然baidu在sohu前面了。用一个范例即可证实: $ sort -n -k 2.2,3.1 -k 1,1r facebook.txt guge 50 3000 sohu 100 4500 baidu 100 5000 google 110 5000 12 有时候在sort命令后会看到+1 -2这些符号,这是什么东东? 关于这种语法,最新的sort是这么进行解释的: On older systems, `sort’ supports an obsolete origin-zero syntax `+POS1 [-POS2]‘ for specifying sort keys. POSIX 1003.1-2001 (*note Standards conformance::) does not allow this; use `-k’ instead. 原来,这种古老的表示方式已经被淘汰了,以后可以理直气壮的鄙视使用这种表示 方法 的脚本喽! (为了防止古老脚本的存在,在这再说一下这种表示方法,加号表示Start部分,减号表示End部分。最最重要的一点是,这种方式方法是从0开始计数的,以前所说的第一个域,在此被表示为第0个域。以前的第2个字符,在此表示为第1个字符。)
sort、sorted排序技巧(多级排序)
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。 示例: 1)排序基础 简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list,新的list的元素基于小于运算符( lt )来排序。 你也可以使用list.sort()方法来排序,此时list本身将被修改。通常此方法不如sorted()方便,但是如果你不需要保留原来的list,此方法将更有效。 另一个不同就是list.sort()方法仅被定义在list中,相反地sorted()方法对所有的可迭代序列都有效。 2)key参数/函数 从python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用。 例如通过key指定的函数来忽略字符串的大小写: key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用。 更广泛的使用情况是用复杂对象的某些值来对复杂对象的序列排序,例如: 同样的技术对拥有命名属性的复杂对象也适用,例如: 3)Operator 模块函数(多级排序) 上面的key参数的使用非常广泛,因此python提供了一些方便的函数来使得访问方法更加容易和快速。operator模块有itemgetter,attrgetter,从2.6开始还增加了methodcaller方法。使用这些方法,上面的操作将变得更加简洁和快速: operator模块还允许多级的排序,例如,先以grade,然后再以age来排序: 4)升序和降序 list.sort()和sorted()都接受一个参数reverse(True or False)来表示降序或升序排序。 例如对上面的student降序排序如下: 5)排序的稳定性和复杂排序 从python2.2开始,排序被保证为稳定的。意思是说多个元素如果有相同的key,则排序前后他们的先后顺序不变。 注意在排序后'blue'的顺序被保持了,即'blue', 1在'blue', 2的前面。 更复杂地你可以构建多个步骤来进行更复杂的排序,例如对student数据先以grade降序排列,然后再以age升序排列。
sort排序是什么?
sort()是c++、java里对数组的元素进行排序的函数,该函数在c++中包含于algorithm库中。sort() 方法用于对数组的元素进行排序。包含于头文件algorithm。sort()说明:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如果有必要),以便进行比较。如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:若 a 小于 b,在排序后的数组中 a 应该出现 在 b 之前,则返回一个小于 0 的值。若 a 等于 b,则返回 0。 (此时不排序)若 a 大于 b,则返回一个大于 0 的值。