c语言中sort的用法详解.docx
C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望对你们有用。C语言中SORT的用法的用法SORT是STL中提供的算法,头文件为INCLUDEALGORITHM以及USINGNAMESPACESTD函数原型如下12345TEMPLATECLASSRANDOMACCESSITERATORVOIDSORTRANDOMACCESSITERATORFIRST,RANDOMACCESSITERATORLASTTEMPLATECLASSRANDOMACCESSITERATOR,CLASSCOMPAREVOIDSORTRANDOMACCESSITERATORFIRST,RANDOMACCESSITERATORLAST,COMPARECOMP使用第一个版本是对FIRST,LAST进行升序排序,默认操作符为,第二个版本使用COMP函数进行排序控制,COMP包含两个在FIRST,LAST中对应的值,如果使用则为升序排序,如果使用则为降序排序,分别对INT、FLOAT、CHAR以及结构体排序例子如下1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071INCLUDESTDIOHINCLUDEALGORITHMINCLUDESTRINGUSINGNAMESPACESTDSTRUCTPRODUCTCHARNAME16FLOATPRICEINTARRAY_INT54,1,2,5,3CHARARRAY_CHAR5A,C,B,E,DDOUBLEARRAY_DOUBLE512,23,52,46,35结构比较函数(按照结构中的浮点数值进行排序)BOOLCOMPARE_STRUCT_FLOATCONSTPRODUCTA,CONSTPRODUCTBRETURNAPRICEBPRICE结构比较函数(按照结构中的字符串进行排序)BOOLCOMPARE_STRUCT_STRCONSTPRODUCTA,CONSTPRODUCTBRETURNSTRINGANAMESTRINGBNAME打印函数VOIDPRINT_INTCONSTINTA,INTLENGTHPRINTF升序排序后的INT数组NFORINTI0ILENGTH1IPRINTFD,AIPRINTFDN,ALENGTH1VOIDPRINT_CHARCONSTCHARA,INTLENGTHPRINTF升序排序后的CHAR数组NFORINTI0ILENGTH1IPRINTFC,AIPRINTFCN,ALENGTH1VOIDPRINT_DOUBLECONSTDOUBLEA,INTLENGTHPRINTF升序排序后的DOBULE数组NFORINTI0ILENGTH1IPRINTF2F,AIPRINTF2FN,ALENGTH1VOIDPRINT_STRUCT_ARRAYSTRUCTPRODUCTARRAY,INTLENGTHFORINTI0ILENGTHIPRINTFNAMESTPRICE2FN,ARRAYINAME,ARRAYIPRICEPUTSVOIDMAINSTRUCTPRODUCTSTRUCTSMP3PLAYER,2990F,PLASMATV,22000F,NOTEBOOK,13000F,SMARTPHONE,49999F,DVDPLAYER,1500F,MATCHES,02F整数排序SORTARRAY_INT,ARRAY_INT5PRINT_INTARRAY_INT,5字符排序SORTARRAY_CHAR,ARRAY_CHAR5PRINT_CHARARRAY_CHAR,5浮点排序SORTARRAY_DOUBLE,ARRAY_DOUBLE5PRINT_DOUBLEARRAY_DOUBLE,5结构中浮点排序INTLENSIZEOFSTRUCTS/SIZEOFSTRUCTPRODUCTSORTSTRUCTS,STRUCTSLEN,COMPARE_STRUCT_FLOATPRINTF按结构中FLOAT升序排序后的STRUCT数组NPRINT_STRUCT_ARRAYSTRUCTS,LEN结构中字符串排序SORTSTRUCTS,STRUCTSLEN,COMPARE_STRUCT_STRPRINTF按结构中字符串升序排序后的STRUCT数组NPRINT_STRUCT_ARRAYSTRUCTS,LENSORT函数的用法做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的ON2排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个SORT函数,可以直接对数组排序,复杂度为NLOG2N。使用这个函数,需要包含头文件。这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是A,B。简单来说,有一个数组INTA100,要对从A0到A99的元素进行排序,只要写SORTA,A100就行了,默认的排序方式是升序。拿我出的AC的策略这题来说,需要对数组T的第0到LEN1的元素排序,就写SORTT,TLEN对向量V排序也差不多,SORTVBEGIN,VEND排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类STRING。如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数比较函数。比较函数是一个自己定义的函数,返回值是BOOL型,它规定了什么样的关系才是小于。想把刚才的整数数组按降序排列,可以先定义一个比较函数CMP1234BOOLCMPINTA,INTBRETURNA排序的时候就写SORTA,A100,CMP假设自己定义了一个结构体NODE12345STRUCTNODEINTAINTBDOUBLEC有一个NODE类型的数组NODEARR100,想对它进行排序先按A值升序排列,如果A值相同,再按B值降序排列,如果B还相同,就按C降序排列。就可以写这样一个比较函数以下是代码片段123456BOOLCMPNODEX,NODEYIFXAYARETURNXAIFXBYBRETURNXBRETURNRETURNXC排序时写SORTARR,A100,CMP12345QSORTS0,N,SIZEOFS0,CMPINTCMPCONSTVOIDA,CONSTVOIDBRETURNINTAINTBSORT函数的用法对INT类型数组排序1234567INTNUM100SAMPLEINTCMPCONSTVOIDA,CONSTVOIDBRETURNINTAINTBQSORTNUM,100,SIZEOFNUM0,CMPSORT函数的用法对CHAR类型数组排序同INT类型1234567CHARWORD100SAMPLEINTCMPCONSTVOIDA,CONSTVOIDBRETURNCHARAINTBQSORTWORD,100,SIZEOFWORD0,CMPSORT函数的用法对DOUBLE类型数组排序特别要注意123456DOUBLEIN100INTCMPCONSTVOIDA,CONSTVOIDBRETURNDOUBLEADOUBLEB11QSORTIN,100,SIZEOFIN0,CMP;SORT函数的用法对结构体一级排序1234567891011STRUCTINDOUBLEDATAINTOTHERS100按照DATA的值从小到大将结构体排序,关于结构体内的排序关键数据DATA的类型可以很多种,参考上面的例子写INTCMPCONSTVOIDA,CONSTVOIDBRETURNINADATAINBDATAQSORTS,100,SIZEOFS0,CMPSORT函数的用法对结构体1234567891011121314STRUCTININTXINTYS100按照X从小到大排序,当X相等时按照Y从大到小排序INTCMPCONSTVOIDA,CONSTVOIDBSTRUCTINCINASTRUCTINDINBIFCXDXRETURNCXDELSERETURNDYCQSORTS,100,SIZEOFS0,CMPSORT函数的用法对字符串进行排序1234567891011STRUCTININTDATACHARSTR100S100按照结构体中字符串STR的字典顺序排序INTCMPCONSTVOIDA,CONSTVOIDBRETURNSTRCMPINASTR,INBSTRQSORTS,100,SIZEOFS0,CMPSORT函数的用法计算几何中求凸包的CMP123456789INTCMPCONSTVOIDA,CONSTVOIDB重点CMP函数,把除了1点外的所有点,旋转角度排序STRUCTPOINTCPOINTASTRUCTPOINTDPOINTBIFCALCC,D,P10RETURN1ELSEIFCALCC,D,P1DISCX,CY,P1X,P1YDISDX,DY,P1X,P1Y如果在一条直线上,则把远的放在前面RETURN1ELSERETURN1猜你喜欢1C中的用法2C语言中逻辑或的用法3C语言STRCMP的用法4C语言中FREE的用法5C语言POW的用法6C语言中PUTCHAR的用法