不是,strcmp按照字典序排列的
所谓字典序就是首先比较第一个字母,如果相同比较第二个
也就是单词在英文字典里的先后关系。
和长度无关。
不妨先看一下真正的qsort函数的声明
size_t的意思是unsigned int 不过使用size_t可以提高兼容度
我们看一下我们代码的所有部分再拆开进行讲解
int cmp(const void* p1, const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
void swap (void* p1, void* p2, size_t size)
{
for (int i = 0; i < size; i++)
{
char tmp = *((char*)p1 + i);
*((char*)p1 + i) = *((char*)p2 + i);
*((char*)p2 + i) = tmp;
}
}
void qsort_bubble(void* base,
size_t count, size_t size,
int (*cmp)(const void* p1, const void* p2))
{
int i = 0;
int j = 0;
for (i = 0; i < count - 1; i++)
{
for (j = 0; j < count - 1 - i; j++)
{
if (cmp((char*)base + j * size, (char*)base + (j + 1) * size)>0)
{
swap((char*)base + j * size, (char*)base + (j + 1) * size,size);
}
}
}
}
int main(void)
{
int arr[10] = { 0,2,3,1,4,5,6,7,9,8 };
//qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), cmp);
qsort_bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), cmp);//要实现的函数
return 0;
}
为了方便我们将交换部分单独创建一个函数
难点在拆解讲解讲解