做动感影集的网站wordpress+下载媒体库
news/
2025/10/7 13:24:21/
文章来源:
做动感影集的网站,wordpress+下载媒体库,做网站每一年都要交钱吗,建设项目网站备案目录 1. qsort是什么#xff1f;
2. 为什么要使用qsort
3. qsort的使用
3.1 qsort的返回值和参数
3.2 qsort的compare函数参数
3.3 int类型数组的qsort完整代码
4. qsort完整代码 1. qsort是什么#xff1f;
qsort中的q在英语中是quick#xff0c;快速的意思了#…目录 1. qsort是什么
2. 为什么要使用qsort
3. qsort的使用
3.1 qsort的返回值和参数
3.2 qsort的compare函数参数
3.3 int类型数组的qsort完整代码
4. qsort完整代码 1. qsort是什么
qsort中的q在英语中是quick快速的意思了sort就是排序故名为快速排序
2. 为什么要使用qsort
它和冒泡排序都能帮助我们排好序为什么要使用快速排序
因为它快速在数据量很大的时候我们用快速排序的效率是非常高的
并且它不仅可以用于计算机的内置类型int、double、float、char......
而且还可以用于自己定义的类型结构体、枚举......
3. qsort的使用
首先要想使用qsort需要包含头文件 stdlib.h然后就可以使用了
先来看看qsort的返回值和参数
3.1 qsort的返回值和参数 base为你要排序数组的首地址类型为void*
因为qsort的开发人员并不知道你需要排序的是一个整型数组还是浮点型数组还是字符串
所以这个指针不能写死为某一个类型而是用来void*void* 可以用来接受任何的类型但它不能进行加减或者解引用运算有利有弊
num为需要排序数组的大小类型为size_t无符号整型大小只能为正或0不能为负
size为数组一个元素的字节大小类型为size_t也是只能为正或0不能为负
最后一个compar为一个函数指针函数返回值为int类型里面的参数是两个const void*
compare是用来比较两个数字字符的大小从而进行排序
如果对这个参数不是很了解可以看看我之前写的文章有写到函数指针和函数指针数组
C语言指针的进阶讲解-CSDN博客
3.2 qsort的compare函数参数
这个compare函数是需要我们自己写的是的就是这么麻烦但是熟悉之后这个函数很容易就能写的出来
因为创造者并不知道我们需要排的是个什么数组只有我们使用者才知道所以创造者只能用你给的一些参数的信息来使用qsort进行排序
int Compare(const void* a, const void* b)
{return *(int*)a - *(int*)b;
} 这是一个用于排序整型的compare函数
首先要写出这个函数我们的返回值和参数必须要跟它需要的一样 我们要比较两个数字的大小那么我们首先要对这两个void类型的指针解引用拿到地址里面的值才能进行比较最后返回一个正数或者负数
但是我们知道void* 是不能进行解引用操作的所以我们必须得要先把这两个参数强制类型转换为int* 然后才能进行解引用操作拿到里面的值最后进行比较返回正数或者负数即可
3.3 int类型数组的qsort完整代码
#include stdio.h
#include stdlib.hvoid Print(int* arr, int n)
{for (int i 0; i n; i){printf(%d , arr[i]);}
}int Compare(const void* a, const void* b)
{return *(int*)a - *(int*)b;
}int main()
{int arr[] { 1,4,5,7,2,3,6,9,8,0 };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), Compare);Print(arr, sz);return 0;
} 3.4 char类型数组的qsort完整代码 字符compare也是类似但还是有很多细节要改变
#include stdio.h
#include stdlib.h
#include string.hvoid Print(char* arr, int n)
{for (int i 0; i n; i){printf(%c , arr[i]);}
}int Compare(const void* a, const void* b)
{return strcmp((char*)a, (char*)b);
}int main()
{char arr[] bdeafcg;int sz strlen(arr);qsort(arr, sz, sizeof(arr[0]), Compare);Print(arr, sz);return 0;
}
首先我们需要引用string.h头文件使用一些关于字符串操作的函数
数组个数sz的计算不能是前面整型的那种方式了需要用库函数strlen计算数组大小
在比较函数里需要使用strcmp比较两个字符这里面不需要解引用因为这个strcmp的两个参数都是需要指针所以传地址即可
qsort甚至还可以用于结构体
具体需要可以看以下完整代码
4. qsort完整代码
#include stdio.h
#include stdlib.h
#include string.htypedef struct student
{char name[20];int age;
}STU;int compare1(void* a, void* b)
{return *(int*)a - *(int*)b;
}int compare2(void* a, void* b)
{return strcmp((char*)a, (char*)b);
}int compare3(void* a, void* b)
{return *(float*)a - *(float*)b;
}int compare4(void* a, void* b)
{return strcmp(((STU*)a)-name, ((STU*)b)-name);
}int compare5(void* a, void* b)
{return ((STU*)a)-age - ((STU*)b)-age;
}void print1(int* arr, int n)
{for (int i 0; i n; i){printf(%d , arr[i]);}
}void print2(char* arr, int n)
{for (int i 0; i n; i){printf(%c , arr[i]);}
}void print3(float* arr, int n)
{for (int i 0; i n; i){printf(%.2f , arr[i]);}
}void print4(STU* arr, int n)
{for (int i 0; i n; i){printf(%s , arr[i].name);}
}void print5(STU* arr, int n)
{for (int i 0; i n; i){printf(%d , arr[i].age);}
}void test1()
{int arr[] { 9,6,3,5,8,2,1,7,4 };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), compare1);print1(arr, sz);
}void test2()
{char arr[] fdghabce;int sz strlen(arr);qsort(arr, sz, sizeof(arr[0]), compare2);print2(arr, sz);
}void test3()
{float arr[] { 1.1,0.5,3.14,9.4,10.5,1.7 };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), compare3);print3(arr, sz);
}void test4()
{STU arr[] { {zhangsan, 26}, {lisi, 56}, {wangwu, 18} };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), compare4);print4(arr, sz);
}void test5()
{STU arr[] { {zhangsan, 26}, {lisi, 56}, {wangwu, 18} };int sz sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), compare5);print5(arr, sz);
}int main()
{//test1();//test2();//test3();//test4();test5();return 0;
}
完 感谢观看
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930449.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!