预备知识
memcmp() //#include <string.h>
- int memcmp(const void *str1, const void *str2, size_t n));其功能是把存储区 str1 和存储区 str2 的前 n 个字节进行比较。该函数是以字典序按字节比较的。
- char *s1="abc"; char *s2="acd"; int r=memcmp(s1,s2,3); 就是比较s1和s2的前3个字节,第一个字节相等,第二个字节比较中大小已经确定,不必继续比较第三字节了。所以r=-1.
sort() //#include <algorithm>
1.sort(start,end,compare())第二个参数是结束地址的下一个地址,第三个参数没有时默认升序。bool compare(T a,T b){....return ..;}返回值控制如何排序
2.1sort(start,end)默认升序:
1 int a[7] = { 2,1,5,7,3,4,3 }; 2 sort(a,a+7); 3 for (int i = 0;i < 7;++i) 4 cout << a[i] << " "; //1,2,3,3,4,5,7
sort(start,end,greater<int>())为降序排序;
2.2自定义降序:
bool compare(int a,int b)
{ return a > b; }; int a[7] = { 3,5,1,7,4,2,8 }; sort(a,a+7,compare);
2.3自定义类型的字典序升序:
struct two { int x;int y; }arr[7]; bool compare(two a,two b) { if (a.x != b.x)return a.x < b.x; else return a.y < b.y; }; sort(arr,arr+7,compare);//arr[i]按照xy字典序升序
;
2.4自定义升序降序混合:
bool compare(two a,two b){
if (a.x != b.x)return a.x < b.x;
else return a.y > b.y;
};
2.5当compare(T a,T b)中return a==b时,不排序。