sort 二维数组排序解决方法
sort 二维数组排序一个小的测试程序,但是结果却不对。#include iostream#include string.h#include cs
sort 二维数组排序 一个小的测试程序,但是结果却不对。
#include <iostream> #include <string.h> #include <cstdlib> #include <algorithm> using namespace std; char *A[4]; int cmp(const char *a, const char *b) { return strcmp(a, b); } int main() { A[1] = "hello"; A[2] = "my"; A[3] = "zzz"; A[0] = "world"; sort(A, A+4, cmp); int i; for(i=0; i<4; i++) cout << A[i] << endl; return 0; }希望A的4个字符串能按字典序输出。但是结果却不对。 二维数组 sort
[解决办法] 换成这样再试试呢。
return strcmp(a, b)<0;[解决办法] 引用: Quote: 引用: 改这样, 以测试 OK bool cmp(const char *a, const char *b) { if( strcmp(a, b) < 0 ) return true; else return false; } 能不能解释下原先的为什么不正确?前者小的时候,结果负数,但是不为零,结果为真,交换数据
前者大的时候,结果正数,结果还是不为零,为真 ,交换数据
那个函数只是判断结果 是零 还是非零, 你这样写 不管大小, 都是非零的
除非相等
[解决办法] 引用: Quote: 引用: int cmp(const char *a, const char *b) { return strcmp(a, b); } 改成bool cmp(const char *a, const char *b) { return strcmp(a, b) <= 0;//<=都表示位置正确 }
能不能解释一下原先为什么不正确?原先的函数类型是int ,而sort要求的比较函数是bool类型的
再看 strcmp(a, b)
a < b 返回 -1
a = b 返回 0
a > b 返回 1
当你直接 return strcmp(a, b) 的时候,只有a = b的时候是0,其他都是非0
而在sort中,如果有比较函数,会用 cmp 和 !cmp来进行位置判断。
在sort中,按照这个标准就把字符串位置换来换去,结果错误。
所以 用return strcmp(a, b) <=0 这样告诉sort 当a <= b的时候,2个字符串的位置正确