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

专门做钻石国外网站苏州做网站要多少钱

专门做钻石国外网站,苏州做网站要多少钱,成都装修公司招聘,wordpress 重定向的次数过多目录: 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数, 它可以对指定数组(包括字符串,二维数组&#x…

 目录:

1.qsort介绍

2.使⽤qsort函数 排序 整型数据 

3.使⽤qsort函数 排序 结构体数据 

4. qsort函数的模拟实现冒泡排序


  qsort()函数 是一个 C语言编译器函数库自带的排序函数, 它可以对指定数组(包括字符串,二维数组,结构体等)进行排序。

头文件:<stdlib.h>

qsort函数原型

void qsort(void *base, //指针,指向的是待排序的数组的第一个元素size_t num, //是base指向的待排序数组的元素个数size_t size, //base指向的待排序数组的元素的大小(字节数)int (*compar)(const void *, const void *) //函数指针);

compar参数是qsort函数排序的核心内容,它指向一个比较两个元素的函数,注意两个形参必须是const void *型,同时在调用compar 函数(compar实质为函数指针,这里称它所指向的函数也为compar)时,传入的实参也必须转换成const void *型。在compar函数内部会将const void *型转换成实际类型。 

c39b2110e80d4138bdb0629bf17a5fbe.png

如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的前面 。如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不变 。如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的后面 。

因此,如果想让qsort()进行从小到大(升序)排序, 那么一个通用的compar函数可以写成这样:

int compare (const void * a, const void * b){if ( *(MyType*)a <  *(MyType*)b )return -1;if ( *(MyType*)a == *(MyType*)b )return 0;if ( *(MyType*)a >  *(MyType*)b ) return 1;}

如果你要将MyType换成实际数组元素的类型。 可以:

//升序排序int compare (const void * a, const void * b){return ( *(int*)a - *(int*)b );//强制类型转换后,进行访问}//降序排列int compare (const void * a, const void * b){return ( *(int*)b - *(int*)a );}

1.使⽤qsort函数 排序整型数据 

a3ef828da6394f96aeda8051a007741c.png

2.使⽤qsort排序 结构体数据 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Stu //学⽣
{char name[20];//名字int age;//年龄
};//假设按照年龄来⽐较
int cmp_stu_by_age(const void* e1, const void* e2)
{return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
//结构体变量.成员名
//结构体指针->成员名//假设按照名字来⽐较
int cmp_stu_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
//strcmp - 是库函数,是专⻔⽤来⽐较两个字符串的⼤⼩的//是按照对应字符串中字符的ASCII码值比较的//按照年龄来排序
void test2()
{struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
}//按照名字来排序
void test3()
{struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}int main()
{test2();//按照年龄来排序test3();//按照名字来排序return 0;
}

3. qsort函数的模拟实现冒泡排序

使⽤回调函数,模拟实现qsort(采⽤冒泡的⽅式) 

#include <stdio.h>int int_cmp(const void * p1, const void * p2)
{return (*( int *)p1 - *(int *) p2);
}void swap(void *p1, void * p2, int size)
//交换两个元素//void*的指针 是无具体类型的指针
{                             //作用是接收任何类型的地址  int i = 0;for (i = 0; i< size; i++){char tmp = *((char *)p1 + i);*(( char *)p1 + i) = *((char *) p2 + i);*(( char *)p2 + i) = tmp;}
}
void bubble(void *base, int count , int size, int(*cmp )(void *, void *))
{int i = 0;int j = 0;for (i = 0; i< count - 1; i++){for (j = 0; j<count-i-1; j++){                            //实现升序看 是否>0 是否进行交换if (cmp ((char *) base + j*size , (char *)base + (j + 1)*size) > 0){       //相当于冒泡排序中的arr[j]与arr[j+1]swap(( char *)base + j*size, (char *)base + (j + 1)*size, size);}}}
}int main(){int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);//自制冒泡排序for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++){printf( "%d ", arr[i]);//实现升序排列}printf("\n");return 0;
}

分享到这里,感谢观看

 

 

http://www.yayakq.cn/news/477400/

相关文章:

  • 织梦做的网站打开慢龙岩网站制作公司
  • 国外域名网站推荐wordpress网站换空间
  • 服务器有了网站怎么做的最近的新闻热点事件
  • 装饰设计公司名字seo华为网站诊断报告
  • 东台建设局官方网站做房产的有哪些网站
  • 做网站寄生虫什么叫关键词举例
  • 网站文章要求足球网站模板
  • 网站建设销售简历黑龙江两学一做网站
  • 汽车网站建设流程南宁网站建设公司如何为老板打造网站赚钱的
  • 茂名东莞网站建设湛江网页设计开发
  • 河北手机网站制作多少钱手机网站开发成为小程序
  • 海口网站建设电话东莞中堂网站建设
  • 网站公司提供程序免费永久云服务器购买
  • 从零开始做网站内容运营制作网页和网站的区别
  • 301重定向到新网站个人社保缴费信息查询
  • 用fw做明星的网站移动端什么意思
  • 百度seo网站排名优化动态的网站怎么做
  • 网站优化 h几 更易被抓哪有做课件赚钱的网站
  • 免费企业网站报价去哪里找做网站的人
  • 重庆在线网站推广软件开发和网页设计的区别
  • 国外注册品牌 建设网站郑州seo竞价
  • 建站平台在线提交功能sem优化技巧
  • 互联网服务平台单位机动车二维码西安seo排名外包
  • 响应式网站图片代码百度广告推广费用一年多少钱
  • 厦门网站设计建设wordpress文章小尾巴
  • 不用iis建立网站网站能调用一些字体
  • 合肥网站设计机构免费ppt模板可编辑
  • 做西餐的网站无锡企业建站模板
  • 中卫网站设计公司排名网站设计计划书的内容
  • 纪念币商城网站建设深圳哪里做网站好