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;
[解决办法]
前者小的时候,结果负数,但是不为零,结果为真,交换数据
前者大的时候,结果正数,结果还是不为零,为真 ,交换数据
那个函数只是判断结果 是零 还是非零, 你这样写 不管大小, 都是非零的
除非相等
[解决办法]
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个字符串的位置正确
