sort函数(c++ sort函数)
C++ sort函数
比较函数是为了区分两个参数是大于等于或者小于,分别以返回值大于0、等于0和小于0来判定。
因为排序的目的主要是让决定谁在前谁在后的问题,所以通常你只需要定义小于就行了。如果compare(a,b)是判定a b,那么根据基本的逻辑,compare(b,a)肯定是判定a b,如果既不大于也不小于,那肯定就是等于了。
所以C++的sort的第三个参数函数原型返回值实际上bool类型,只需要在内部确定a 排在b前面时返回true就行了。虽然你用的整型返回值,但也是一样的,0为false,非0为true。
显然,这里涉及到一个逻辑问题,compare(a,b)返回true时表示a排在b前面,为了逻辑准确sort函数内部还有一次验证compare(b,a)是否也为true,如果也为true则出现了逻辑错误了,因为不知道到底是a在前还是b在前。如果你在compare(a,b)内部用的是=返回true,那么在一个没有相等的Letter.big成员时还正常,如果有相等的Letter.big成员时,就出现了compare(a,b)和compare(b,a)都为true,这是错误的。
sort()函数中的第三个参数:比较函数
sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。
?因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的,?可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。
c语言运用sort 排序函数,需要的头文件是什么?
sort不属于C语言的标准函数,所以也没有相应的头文件,但是可以自定义。
sort?函数为将整型数组从小到大排序。
voidsort(int*a,intl)//a为数组地址,l为数组长度。
{
inti,j;
intv;
//排序主体
for(i=0;il-1;i++)
for(j=i+1;jl;j++)
{
if(a[i]a[j])//如前面的比后面的大,则交换。
{
v=a[i];
a[i]=a[j];
a[j]=v;
}
}}
扩展资料
c语言自有的qsort函数
#includestdio.h
#includestdlib.h
intcomp(constvoid*a,constvoid*b)//用来做比较的函数。
{
return*(int*)a-*(int*)b;
}
intmain()
{
inta[10]={2,4,1,5,5,3,7,4,1,5};//乱序的数组。
inti;
qsort(a,n,sizeof(int),comp);//调用qsort排序
for(i=0;i10;i++)//输出排序后的数组
{
printf("%d\t",array[i]);
}
return0;
}
sort排序是什么?
sort()是c++、java里对数组的元素进行排序的函数,该函数在c++中包含于algorithm库中。
sort() 方法用于对数组的元素进行排序。包含于头文件algorithm。
sort()说明:
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如果有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现 在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。 (此时不排序)
若 a 大于 b,则返回一个大于 0 的值。
c++中排序函数sort用的是什么方法排序
STL的sort函数在数据量大时采用快排,分段递归排序,一旦分段后的数据小于某个值,就改用插入排序。如果递归层次过深,还会改用堆排序。这样就结合了各类算法的所有优点。
关于c++的sort函数
cmp实际上是一个函数模板,sort在调用时,是一个通用的过程。你可以假想sort是一个小机器人,能够在一个仓库里将货架上的货物进行排序。你第一次要求机器人“按照大小排序”,于是机器人花了几分钟完成了大小排序,第二次你要求机器人“按照重量排序”,于是机器人再次回到仓库,对同样的货物进行排序,不同的是这次并不按照大小,而是按照重量进行排序。
在这个的例子里,cmp函数决定了排序的方法,也就是重量、大小还是长度等等不同维度的东西。因为你的例子sort数据都是整数,因此看不出来这个函数的威力,如果输入的数据是struct,每个数据由不同的属性,比如上面例子的尺寸大小、重量甚至颜色等等,那么cmp函数写法就很有意思了