当前位置: 首页 > news >正文

网站建设网络营销平台: 云搜系统jsp网站开发文献

网站建设网络营销平台: 云搜系统,jsp网站开发文献,深圳品牌网站推广公司,wordpress水印怎么开qsort 函数的使用 首先qsort函数是使用快速排序算法来进行排序的#xff0c;下面我们打开官网来查看qsort是如何使用的。 这里有四个参数#xff0c;首先base 是至待排序的数组的首元素的地址#xff0c;num 是值这个数组的元素个数#xff0c;size 是指每个元素的大小下面我们打开官网来查看qsort是如何使用的。 这里有四个参数首先base 是至待排序的数组的首元素的地址num 是值这个数组的元素个数size 是指每个元素的大小最后是一个函数指针用来比较两个元素的不同其中这个函数需要有返回值当返回值小于0时p1需要放在p2前面等于0时p1和p2不用改变位置当返回值大于0时p1需要放在p2的后面由此可见这个函数需要我们自己去编写然后通过函数指针来调用。 下面我们来看看qsort的实践效果 #include stdio.h #include string.h #include stdlib.htypedef struct Stu {char name[20];int age; }Stu;int cmp_array(const void* p1,const void* p2) {return *(int*)p1 - *(int*)p2; }int cmp_stu_name(const void* p1, const void* p2) {return strcmp(((Stu*)p1)-name, ((Stu*)p2)-name); }int cmp_stu_age(const void* p1, const void* p2) {return ((Stu*)p1)-age - ((Stu*)p2)-age; }void PrintArray(int arr[], int sz) {for (int i 0; i sz; i){printf(%d , arr[i]);}printf(\n); }void PrintStu(Stu* s, int sz) {for (int i 0; i sz; i){printf(%s %d, s[i].name, s[i].age);printf(\n);} }int main() {Stu s[3] { {zhangsan,18},{lisi,19},{sunwu,15} };int sz sizeof(s) / sizeof(s[0]);int arr[10] { 4,8,5,7,9,6,2,0,1,3 };int sz2 sizeof(arr) / sizeof(arr[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_name);PrintStu(s, sz);printf(\n);qsort(s, sz, sizeof(s[0]), cmp_stu_age);PrintStu(s, sz);printf(\n);qsort(arr, sz2, sizeof(arr[0]), cmp_array);PrintArray(arr, sz2);printf(\n);return 0; }使用C语言模拟qsort 这里我们使用冒泡排序算法进行排序使用C语言来模拟qsort函数。        首先我们来回顾冒泡排序算法有两个要点一个是排序的趟数另一个是每一趟排序的次数。这里以升序为例 void bubble_sort(int arr[], int sz) {for (int i 0; i sz - 1; i){for (int 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;}}} }然后来模拟qsort函数呢首先qsort函数几乎对任何数据都可以排序所以我们的bubble_sort函数要做出相应调整然后设计形参呢对任何数据进行排序也就是说数据的类型和大小都是不确定的这样的话我们可以使用size_t来作为数据类型用void来接收不同类型的指针实在不会的我们可以参考qsort 函数来设计的。 void base 接收待排序的首元素的地址size_t num 和 size_t size 来接收元素个数和元素大小最后就是最重要的函数设计了。 void bubble_sort(void* base, size_t num, size_t size, int (*compar) (const void* p1, const void* p2)) 设计好形参我们来考虑一下函数的主体部分首先趟数是不改变的每趟的次数也不用改变毕竟我们还是使用冒泡排序算法这样的话还有最后一个就是if这个判断语句应为我们无法直接通过像上面一样对两个数进行直接比较我们需要调用函数来进行比较也就是compar函数。 那有个问题我们如何来写compar 函数的指针呢这个指针不能大也不能小否则就无法准确比较或者会产生越界行为这样我们可以使用char* 为什么呢首先我们需要两个两个数据来进行一一比较这样我们需要知道准确的地址必须是恰好指向每个元素的地址而char 刚好就是一个字节只要准确地进行指针加法运算就能得到这个元素地地址。 if (compar((char*)base j * size, (char*)base (j 1) * size) 0) 还有个问题我们怎么交换数据呢其实和上面的理由差不多由于数据的类型不同他们的大小也不同。这时我们可以使用char 因为char 是最小的数据类型了也就是一个字节无论数据是几个字节都是char 的倍数也就是说都可以用一个字节的倍数来表示这样的话我们只需要知道数据类型的大小size) 就可以来通过循环遍历来一个字节一个字节来进行进行交换就可以了,我们可以封装一个函数swap。 void swap(char* p1, char* p2, size_t size) {int i 0;while (i size){char tmp *(p1 i);*(p1 i) *(p2 i);*(p2 i) tmp;i;} }那么我们最后得到的bubble_sort函数如下 void bubble_sort(void* base, size_t num, size_t size, int (*compar) (const void* p1, const void* p2)) {for (int i 0; i num - 1; i){for (int j 0; j num - 1 - i; j){if (compar((char*)base j * size, (char*)base (j 1) * size) 0){swap((char*)base j * size, (char*)base (j 1) * size);}}} }我们来演练一下看看效果是不是和qsort有着一样的效果 代码如下 #include stdio.h #include string.htypedef struct Stu {char name[20];int age; }Stu;int cmp_array(const void* p1,const void* p2) {return *(int*)p1 - *(int*)p2; }int cmp_stu_name(const void* p1, const void* p2) {return strcmp(((Stu*)p1)-name, ((Stu*)p2)-name); }int cmp_stu_age(const void* p1, const void* p2) {return ((Stu*)p1)-age - ((Stu*)p2)-age; }void PrintArray(int arr[], int sz) {for (int i 0; i sz; i){printf(%d , arr[i]);}printf(\n); }void PrintStu(Stu* s, int sz) {for (int i 0; i sz; i){printf(%s %d, s[i].name, s[i].age);printf(\n);} }void swap(char* p1, char* p2, size_t size) {int i 0;while (i size){char tmp *(p1 i);*(p1 i) *(p2 i);*(p2 i) tmp;i;} }void bubble_sort(void* base, size_t num, size_t size, int (*compar) (const void* p1, const void* p2)) {for (int i 0; i num - 1; i){for (int j 0; j num - 1 - i; j){if (compar((char*)base j * size, (char*)base (j 1) * size) 0){swap((char*)base j * size, (char*)base (j 1) * size, size);}}} }int main() {Stu s[3] { {zhangsan,18},{lisi,19},{sunwu,15} };int sz sizeof(s) / sizeof(s[0]);int arr[10] { 4,8,5,7,9,6,2,0,1,3 };int sz2 sizeof(arr) / sizeof(arr[0]);bubble_sort(s, sz, sizeof(s[0]), cmp_stu_name);PrintStu(s, sz);printf(\n);bubble_sort(s, sz, sizeof(s[0]), cmp_stu_age);PrintStu(s, sz);printf(\n);bubble_sort(arr, sz2, sizeof(arr[0]), cmp_array);PrintArray(arr, sz2);printf(\n);return 0; }
http://www.zqtcl.cn/news/323362/

相关文章:

  • 泉州模板开发建站wordpress显示一个类目
  • 河南造价信息网官网为什么要做网站优化
  • 网站做个seo要多少钱做公司网站开发的公司
  • 企业网站html模板下载安装的字体wordpress
  • 庙行镇seo推广网站朋友圈的广告推广怎么弄
  • 网站打不开怎么办html怎么做网站背景
  • 厦门网站排名网络服务类型有哪些
  • 如何选择制作网站公司心雨在线高端网站建设专业
  • 山西做网站如何选择2万元最简单装修
  • 广丰区建设局网站友情链接发布网
  • 沧州做网站的专业公司python做网站视频
  • 管理外贸网站模板下载大数据营销优势
  • 做网站的小图标硬盘做网站空间
  • 微信网站界面设计宁波网站优化公司推荐
  • 深圳商城网站开发七冶建设集团网站
  • 广州旅游网站建设设计公司wordpress长文章分页代码
  • 手机营销网站网站的字体
  • 设计网站大全软件互动营销用在哪些推广上面
  • 建设银行网站怎样查询贷款信息吗台州网站制作 外贸
  • 建设网站的步骤知乎app开发定制公司
  • 怎样自己做刷赞网站专业网站设计服务
  • 云主机建站如何让自己做的博客网站上线
  • 目前我们的网站正在建设中做网站违反广告法
  • 有没有做美食的规模网站怎么做国外的网站吗
  • 竭诚网络网站建设开发杭州百度推广
  • 怎样购买起名软件自己做网站小程序制作收费
  • 制作企业网站欢迎界面素材cuntlove wordpress
  • 适合建设网站的国外服务器人工智能培训机构
  • 怎么套网站潜江资讯网招聘信息
  • 网站建设 微信公众号建设网站需要