相比于一般的冒泡排序,这种进阶版的冒泡排序更加的完善。这种进阶的冒泡排序可以将任何的类型进行排序,比一般的冒泡排序更加的完备。
这里运用到了一个qsort函数的一种思想,我们qsort函数中有四个参数,我们就运用到了第4个参数–>函数指针
首先了解qsort函数的参数部分
void sqort(void base, size_t num, size_width, int(cmp)(const void e1, const void e2);
第一个参数 – 待排序数组的起始位置
第二个参数 — 待排序数组有几个元素
第三个参数 — 待排序数组元素大小(字节)
第四个参数 — 比较函数这个函数需要自己定义,如果e1>e2,函数返回-1;e1<e2,函数返回1;e1==e2函数返回0
默认是从小到大排序的!**
所以我们要写一个函数来对我们待排序的数组进行判断
这是浮点型的设计函数运用于浮点型的数组
int cmp_float(const void* e1, const void* e2)
{
//两种写法
/*if (*(float*)e1 == *(float*)e2)
return 0;
else if (*(float*)e1 > *(float*)e2)
return 1;
else - 1;*/
return (int)((*(float*)e1 - *(float*)e2));
}
这是结构体的设计函数,运用于结构体数组
int cmp_Str(const void* e1, const void* e2)
{
//强制类型转化为结构体指针
//当比较的是字符串时,使用strcmp函数
//return ((struct Stu*)e1)->字符串 - ((struct Stu*)e2)->字符串;
return strcmp