sort与qsort
一、sort:
1、头文件#include
2、格式 sort(arry,arry + n,cmp) 说明:arry为数组名(即首元素地址)、n为数组中元素个数、cmp是自己定义的函数。因为sort默认升序排序,通过自己定义的cmp我们可以实现降序、二位排序等操作。
3、应用:
a、字符数组char:
#include<iostream>
#include<algorithm> using namespace std; int main() { char a[11]={'b','a','v','r','f','d','j','t','r','e'}; sort(a,a+10);//默认升序 cout<<a; }
#include<iostream> #include<algorithm> using namespace std; bool cmp(char a,char b)//自己定义cmp函数 { return a>b;//a } int main() { char a[11]={'r','s','g','d','d','h','j','s','h','d'}; sort(a,a+11,cmp); cout<<a; }
b、对double、int等类型数据排序同上模型,只需改变一下数据格式。
c、对结构体按要求排序#include<iostream>
#include<algorithm> #define n 5 using namespace std; struct data { int a; int b; int c; }; bool cmp(data x,data y) { if(x.a!=y.a) return x.a>y.a; if(x.b!=y.b) return x.b>y.b; if(x.c!=y.c) return x.c>y.c; } int main() { int i; data array[n]; for(i=0;i cin>>array[i].a>>array[i].b>>array[i].c; sort(array,array+n,cmp); for(i=0;i cout<<array[i].a<<' '<<array[i].b<<' '<<array[i].c<<endl; return 0; }
二、qsort
1、头文件#incldue<algorithm>
2、格式void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *))
说明:base为数组名、nelem为数组元素个数、width为数组规模、fcmp是自己定义的函数(和sort一样)
3、应用:(对不同类型数据进行排序是只需改变一下数据类型)
#include<iostream> #include<algorithm> using namespace std; int comp(const void*a,const void *b) { return *(int*)a-*(int*)b; } int main() { int i; int a[111]={3,1,4,3,4,5,6,4,2,7}; qsort(a,3,sizeof(a[0]),comp); for(i=0;i<10;i++) cout<<a[i]<<' '; return 0; }
注:1、sort与qsort都可以通过改变参数从而对数组部分排序。
2、sort的比较函数返回值是大小关系,qsort返回值可以是大小关系也可以是真或假。(目前测试是这样,待定????)
3、sort的比较函数中参数可以是相应的数据类型,qsort中的参数是指针