目录
介绍:
不同类型
struct Stu(对比字符串):
int:
char:
qsort()函数是 C 库中实现的快速排序算法,包含在 stdlib.h
头文件中。函数原型如下:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
此函数需要四个参数。
对于比较函数,因比较形式的多量化,所以作者就将比较函数交给书写者自行进行编译书写。(以整数类型数组排序举例)
#include
#include
void print(int sz, int arr[])
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int cmp_int(const void* e1, const void* e2)
{
return (int*)e1 - (int*)e2;
}
int main()
{
int arr[3] = { 3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print(sz, arr);
return 0;
}
注:
int (__cdecl *compare )(const void *elem1, const void *elem2 )
对此,我们知道qsort是一个运用,快排的方式,使得一串数据以低到高,如果,我们需要以高到低呢,这就需要反思维了,我们须知,以低到高,是有与前者大于后者即换,反之不换。那我们就反过来,后者大于前者即换,反之不换。那我们是不是就得到了一串有高到低的数据,于是我们将"e1 - e2";变为"e2 - e1"即可。以上者代码为例,我们将其变为如此即可:
#include
#include
void print(int sz, int arr[])
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int cmp_int(const void* e1, const void* e2)
{
return (int*)e2 - (int*)e1; //重点变化点
} //-------------------------------
int main()
{
int arr[3] = { 3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print(sz, arr);
return 0;
}
#include
#include
struct Stu
{
char name[20];
int age;
};
int cmp_struct_Stu(const void* e1, const void* e2)
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
int main()
{
struct Stu arr[3] = { {"zhangsan", 20},{"lisi", 30},{"wangwu", 10} };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%s,%d ", (arr[i]).name, (arr[i]).age);
}
printf("\n");
return 0;
}
#include
#include
void print(int sz, int arr[])
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int cmp_int(const void* e1, const void* e2)
{
return (int*)e1 - (int*)e2;
}
int main()
{
int arr[3] = { 3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print(sz, arr);
return 0;
}
#include
#include
int cmp_char(const void* e1, const void* e2)
{
int n = (*(char*)e1 - *(char*)e2);
return (*(char*)e1 - *(char*)e2);
}
void print(int sz, char arr[])
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%c ", arr[i]);
}
printf("\n");
}
int main()
{
char arr[3] = { 'b','a','c'};
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print(sz, arr);
return 0;
}