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

国内旅行做行程网站南充房管局官网

国内旅行做行程网站,南充房管局官网,网站链接只显示到文件夹怎么做的,ui设计说明万能模板一#xff0c;本文目标 qsort函数可以对任意类型数据甚至是结构体内部的数据按照你想要的规则排序#xff0c;它的功能很强大#xff0c;可是为什么呢#xff1f; 我将通过模拟实现qsort函数来让你对这整个过程有一个清晰的深刻的理解。 二#xff0c;qsort函数原型 v…一本文目标  qsort函数可以对任意类型数据甚至是结构体内部的数据按照你想要的规则排序它的功能很强大可是为什么呢 我将通过模拟实现qsort函数来让你对这整个过程有一个清晰的深刻的理解。 二qsort函数原型 void qsort (void* base,//要排序的对象的第一个元素的首地址size_t num, //对象的个数size_t size,//每一个对象的大小 Size in bytesint (*compar)(const void*,const void*));//Pointer to a function that compares two elements.并且这个函数要自己写 qsort函数底层通过快速排序进行但是这并不是我们感兴趣的点我想要知道qsort为什么可以对任意类型数据进行排序与它用什么排序算法排序没有关系所以我们用相对简单的冒泡排序来代替快速排序的算法把冒泡排序赋予可以对任意类型数据进行排序的强大功能。 三冒泡排序——大数沉底小数上浮 对于冒泡排序其基本思想是大数沉底小数上浮 这里直接给出源码 void Bubble_sort(int arr[], int size) {int j,i;for (i 0; i size-1;i)//排序趟数等于元素个数-1{int f 0;for (j 0; j size - 1 - i; j)//每一趟都有一个元素复位需要排序的次数每次-1{if ( arr[j] arr[j1] ){int tem arr[j];arr[j] arr[j1];arr[j1] tem;f 1;}}if (f 0) {break;}} 3.1相对于qsort冒泡排序的局限性 只能排序整形数据  四两个问题 4.1不定类型比较问题 1.对于if内部的判断虽然字符型可以用 ,, 比较但是对于字符串类型无法通过常规方法比较 4.2不定类型交换问题 2.对于交换部分由于不同元素的类型不同占用的内存空间也不同如何判断传入数据的类型并实现两个数据的交换呢 五改造冒泡排序 我们将自己模拟实现的qsort函数称my_qsort实现如下 void my_qsort(void* base,size_t sz,size_t width,int (*cmp)(const void* p1,const void* p2))//cmp 是函数指针在my_sort中被多次调用 {//它指向的函数是int_cmpint_cmp就是回调函数int i 0;for(i 0;i sz - 1;i)//趟数不变{int j 0;for(j 0;j sz - i - 1;j)//每一趟进行的比较数不变{if(cmp((char*)base j * width,(char*)base (j 1) * width) 0 )//判断要改变{Swap((char*)base j * width,(char*)base (j 1) * width,width);}}} }5.1不同类型比较 我们定义一个cmp函数来实现比较 5.1.1cmp实参 我们传入排序的数组的首元素地址base将base强制类型转化为 char* 类型这样base与整数的运算就只会跨过这个整数个字节 如果再知道每个元素的大小长度那么我们就可以精确的访问到每个元素了 怎么理解呢  e.g.1:对于int 图中的base指针的位置是 j 1的位置 e.g.2:对于char 图中的base指针的位置是 j  5 的位置  5.1.2cmp形参 int int_cmp(const void* p1,const void* p2) {return *(int*)p1 - *(int*)p2; } 由于比较的对象是整型所以定义一个比较整形的函数void* 类型不能直接解引用所以将p1p2强制类型转化将两数相减返回。 5.2不定类型交换问题 定义交换函数Swap  void Swap(char* buf1,char* buf2,int width)//按字节逐个交换 {for(int i 0;i width;i){char tem *buf1;*buf1 *buf2;*buf2 tem;buf1;//如果是整型则要遍历四个字节buf2;} }这时候我们就知道定义width的意义了对于一个数据类型我们虽然不知道它的类型但是我们可以根据它的长度一个一个字节地交换数据。 整体代码运行 对于所有类型我们的冒泡排序都可以排序了它的作用与库函数qsort一致仍然需要我们自己写cmp函数 对int型数据的排序 #includestdio.h #includestring.h int int_cmp(const void* p1,const void* p2) {return *(int*)p1 - *(int*)p2; } void Swap(char* buf1,char* buf2,int width)//按字节逐个交换 {for(int i 0;i width;i){char tem *buf1;*buf1 *buf2;*buf2 tem;buf1;//如果是整型则要遍历四个字节buf2;} }void my_qsort(void* base,size_t sz,size_t width,int (*cmp)(const void* p1,const void* p2))//cmp 是函数指针在my_sort中被多次调用 {//它指向的函数是int_cmpint_cmp就是回调函数int i 0;for(i 0;i sz - 1;i)//趟数不变{int j 0;for(j 0;j sz - i - 1;j)//每一趟进行的比较数不变{if(cmp((char*)base j * width,(char*)base (j 1) * width) 0 )//判断要改变{Swap((char*)base j * width,(char*)base (j 1) * width,width);}}} }void test1(void) {int arr[] {2,5,8,9,6,3,1,4,7,0};int sz sizeof(arr)/sizeof(arr[0]);my_qsort(arr,sz,sizeof(arr[0]),int_cmp);for(int i 0;i sz;i){printf(%d ,arr[i]);} }int main() {test1();return 0; }对于结构体类型也可根据结构体内部某一元素的特征排序 结构体类型 对结构体内的int型数据排序 struct stu {char name[20];int age; };int struct_cmp_by_age(const void* p1,const void* p2) {return ((struct stu*)p1)-age - ((struct stu*)p2)-age; }void test2(void) {struct stu arr[] {{zhangsan,18},{lisi,25},{wangwu,30},{xiaoming,40}};int sz sizeof(arr)/sizeof(arr[0]);my_qsort(arr,sz,sizeof(arr[0]),struct_cmp_by_age);for(int i 0;i sz;i){printf(%s %d\n,arr[i].name,arr[i].age);} }int main() {test2();return 0; } 对结构体内的char型数据排序 struct stu {char name[20];int age; };int struct_cmp_by_name(const void* p1,const void* p2) {return strcmp(((struct stu*)p1)-name,((struct stu*)p2)-name); }void test3(void) {struct stu arr[] {{zhangsan,18},{lisi,25},{wangwu,30},{xiaoming,40}};int sz sizeof(arr)/sizeof(arr[0]);my_qsort(arr,sz,sizeof(arr[0]),struct_cmp_by_name);for(int i 0;i sz;i){printf(%s %d\n,arr[i].name,arr[i].age);} }int main() {//test1();//test2();test3();return 0; } 1.对字符串的比较用到string.h中的strcmp函数而它的返回值正好符合qsort函数第四个参数函数的要求  第一个字符串大于第二个strcmp返回大于0的数对应qsort函数要求第四个函数的返回值大于0表示第一个参数大一第二个。  本文回顾  目录 一本文目标  二qsort函数原型 三冒泡排序——大数沉底小数上浮 3.1相对于qsort冒泡排序的局限性 四两个问题 4.1不定类型比较问题 4.2不定类型交换问题 五改造冒泡排序 5.1不同类型比较 5.1.1cmp实参 5.1.2cmp形参 5.2不定类型交换问题 整体代码运行 对int型数据的排序 结构体类型 对结构体内的int型数据排序 对结构体内的char型数据排序 完~ 未经作者同意禁止转载
http://www.zqtcl.cn/news/259069/

相关文章:

  • 南宁网站建设培训学校青海网站建设加q5299丶14602做词
  • 鱼台做网站多少钱wordpress pot
  • 招聘网站建设维护人员怎样自己开发一款软件
  • 上海网站制作怎么选泰安网红人物
  • 企业网站建设义乌南靖网站建设
  • 抖音电商网站建设如何制作app推广
  • 关键词的选择网站提示网站建设电销异议处理话术
  • 南京建设网站内容网站打开速度慢是否需要升级带宽
  • 内容类网站如何 流量厦门市建设局网站住房保障专栏
  • 朝城做网站公司网站内容建设要求age06
  • 云南省城乡建设培训中心网站备份wordpress网站
  • 快速建站公司地址vr哪家公司做得好
  • 网站空间怎么更换网站营销如何做
  • 制作单页网站要网址wordpress更新显示失败
  • 阿里巴巴网站建设公司设计网站制作
  • 泰安网站建设有哪些常见的cms网站程序有哪些
  • 九寨沟城乡建设官方网站深圳的互联网公司排名
  • app可视化开发工具seo网站推广服务
  • 临近做网站网络营销方式哪些?
  • 网站数据分析案例怎样在网上做广告
  • 网站页头图片怎么做几个版面的网站
  • 网站 f型网站建设 大公司
  • 做网站最好选什么语言百度域名服务器
  • 网站维护一般多久西宁的网站建设
  • 网站建设需要什么工具投诉百度最有效的电话
  • 做家政网站公司策划公司英文
  • 自己建设个人网站要花费多少自己怎么制作微信网页链接
  • 邢台网站设计哪家专业php图书管理系统网站开发
  • 怎么去建一个网站艺术设计专业
  • 中国优秀设计网站有哪些内容万能影视免费观看app