看了不少大佬的,没有对整型数组的qsort对比,总结经验如下。
总结:
1.整型数组 int a[]
arg1 是个指针,只向了 arr的第一个元素,是int,所以 强制类型 (int*),
对比的时候需要解应用 *(int*)
2.字符串二维数组 char *a[]
arg1 是个指针,指向了 *a[]的第一个元素,*a[]是 指针数组,里面存放了指针,所以 arg1 是 指向了 字符串指针的 指针,即char**
对比时 strcmp 对比的是指针,所以需要 char *a = *(char**)_a;
3.字符串二维数组 char a[][]
arg1 是个指针,指向了 a[][]的第一个元素,a[0][0]是个字符,所以 char*
对比是 strcmp对比的是指针,所以 char *a = (char*)_a;
4.整型二维指针 int a[][]
arg1 同理,指向了 a[0][0],是个int,所以 (int*),可以用
int a = *(int*)_a; return a-b;默认对比第一列元素
也可以这 ,int *a = (int*)_a,return a[1]-b[1],对比第二列元素
5.整型二维指针 int*a[]
arg1,*a[] 是个 指针数组,里面放的指针,第一个元素是 整型指针,arg1 是个指向了 “整型指针”的指针,即 (int**)
int a = *(int**)_a, return a-b;对比的第一列元素
也可以 int *a = (int**)_a, return a[1]-b[1],对比第二列元素
// int compare(const void *arg1, const void *arg2);
// int main()
// {
// int i;
// int arr[5][2] = {{1,2},{3,2},{6,10},{1,3},{5,8}};
// qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), compare);
// for (i = 0; i < 5; i++) {
// printf("%d,%d \n", arr[i][0],arr[i][1]);
// }
// printf("\n");
// system("pause");
// return 0;
// }
// int compare(const void *arg1, const void *arg2) {
// int *a = (int*)arg1;
// int *b = (int*)arg2;
// return a[1]-b[1];
// }
int compare(const void *arg1, const void *arg2);
int main()
{
int i;
int *arr[5] = {{1,2},{3,2},{6,10},{1,3},{5,8}};
qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), compare);
for (i = 0; i < 5; i++) {
printf("%d \n", arr[i]);
}
printf("\n");
system("pause");
return 0;
}
int compare(const void *arg1, const void *arg2) {
int *a = (int**)arg1;
int *b = (int**)arg2;
return a[1]-b[1];
}