回调函数
回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的时候方直接调用,而是在特定的事件或条件发生时由另外一方调用,用于对该事件或条件进行响应。
冒泡排序
void Bubble_sort(int arr[], int sz)
{
int i = 0;
//趟数
for (i = 0; i < sz - 1; i++)
{
int flag = 1;//假设数组有序
int j = 0;
//每一趟
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;
}
}
if (flag == 1)
{
break;
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
Bubble_sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
虽然我们实现了冒泡排序,但是冒泡排序只能针对整型,如果需要我们排序的是其他类型呢,比如说结构体等等。
所以我们这里讲解一下qsort函数
qsort函数
qsort可以排序不同数据类型;
qsort定义
void* base //要排序的数据起始位置
size_t //待排序数据的个数
size_t //待排序数据一个元素的大小(单位是字节)
int ( *compare )(const void *e1, const void *e2 ) //函数指针,指向的是我们自己需要动手写的比较函数的地址,因为qsort可以比较不同数据类型,所以需要程序员自己实现比较方法
void*指针讲解
void * 是无具体类型的指针,可以接受任意类型的地址。但是void * 指针不能解引用,也不能±整数。
qsort所用到的比较函数
qsort实现冒泡排序
qsort默认升序,如果想降序
qsort实现结构体排序
字符串的比较是按照字符的大小进行的
用冒泡排序思维模拟qsort函数