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

做网站当生日礼物网站制作费用

做网站当生日礼物,网站制作费用,wordpress手机端源码,设计类的软件有哪些目录 1. 快速排序 1.1 快速排序理论分析 1.2 快速排序的模拟实现 2. qsort的模拟实现 2.1 qsort的理论分析 2.2 qsort的模拟实现 qsort函数是基于快速排序思想设计的可以针对任意数据类型的c语言函数。要对qsort进行模拟实现,首先就要理解快速排序。 1. 快…

目录

1. 快速排序

1.1 快速排序理论分析 

1.2 快速排序的模拟实现 

2. qsort的模拟实现 

2.1 qsort的理论分析

2.2 qsort的模拟实现


qsort函数是基于快速排序思想设计的可以针对任意数据类型的c语言函数。要对qsort进行模拟实现,首先就要理解快速排序。

1. 快速排序

1.1 快速排序理论分析 

上一期博客选择排序,冒泡排序,插入排序,快速排序及其优化-CSDN博客我们大概讲解了快速排序的思路,现在我们来详细讲解以下快速排序。

 让我们来逐帧分析快速排序的思想。

1. 第一步便是找到基准数,开始分区:基准数可以选择第一个,最后一个,也可以是随机的(为了便于理解,以下的图都默认选的是第一个,当然代码是随机的,重要的是先把交换三个数的本质理解到)

2.  分而治之,调整后基准数的左右两边,再进行相同的操作,直到不能再排序(数组长度为1时,就不能再排序了)

 

1.2 快速排序的模拟实现 

以上便是对快速排序底层逻辑的分析, 接下来以c语言为例,讲解模拟实现快速排序。

1. 选一个基准数,这里选的是首元素

2. 开始分区,遍历整个数组,开始交换位置(三个数),小的在前,大的在后

3. 开始递归,左右两边都要开始递归,由于需要知道边界,所以分区时,应该再返回基准数的地址。同时为了避免递归递而不归,应设置最小的长度


/*返回值:基准数最后的下标参数:需要分区的部分(从头到尾开始排)
*/
int partition(int arr[], int start, int end)
{int len = end - start;int* ppivot = arr + start;int* s = ppivot + 1;while (len--){if (*ppivot >= *s){int temp = *s;*s = *(ppivot + 1);*(ppivot + 1) = *ppivot;*ppivot = temp;ppivot++;}s++;}return ppivot - arr;
}/*返回值:arr首元素的地址参数:需要排序的部分(从头到尾)
*/int* quick_sort(int arr[], int start, int end)
{assert(arr);int* p = arr;if (end > start){int pivot = partition(arr, start, end);quick_sort(arr, start, pivot - 1);quick_sort(arr, pivot + 1, end);}return p;
}

 当然,对于分区的排序可以进行优化,使用双指针也可以。双指针就是首尾往中间交换的模式,效率自然更高。这里不过多展开去讲。

2. qsort的模拟实现 

2.1 qsort的理论分析

C 库函数 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 对数组进行排序。它可以接收任意类型进行排序,其实跟快速排序接收int类型差不多,只是这里多了一个强制类型转换。

2.2 qsort的模拟实现

qsort的模拟实现,基本就是在quick_sort上做改造,将原来只可以进行int数据类型的改成任意数据类型。

1. 原来是数值之间的比较,现在要改成有专门的比较数据大小的函数(字符:strcmp)

2. 交换位置,原来int直接就可以交换数据,现在强制类型转换成char*后,单位转换的变少了,则需要循环4次,才够int 四个字节

3. 指针加1, 原来有确定类型,现在是void* 原来加1,现在就应该加size

int cmp_int(const void* a, const void* b)
{return *(int*)a - *(int*)b;
}/*返回值:基准数最后的下标参数:需要分区的部分(从头到尾开始排)
*/
int partition(void* arr, int start, int end, size_t size)
{int len = end - start;char* ppivot = ((char*)arr + start * size);char* s = ppivot + size;while (len--){if ((*cmp_int)(ppivot, s) > 0){for (int i = 0; i < size; i++){int temp = *(s+i);*(s+i) = *(ppivot + size + i);*(ppivot + size + i) = *(ppivot+i);*(ppivot+i) = temp;}ppivot += size;}s += size;}return (int)((ppivot - (char*)arr) / size);
}/*返回值:arr首元素的地址参数:需要排序的部分(从头到尾)
*/void* quick_sort(void* arr, int start, int end,size_t size)
{assert(arr);if (end > start){int pivot = partition(arr, start, end,size);quick_sort(arr, start, pivot - 1,size);quick_sort(arr, pivot + 1, end,size);}return arr;
}void* my_qsort(void* arr, size_t len, size_t size, int (*cmp_int)(const void* a, const void* b))
{assert(arr);int start = 0;int end = (int)len - 1;quick_sort(arr, start, end, size);return arr;
}

感谢各位大佬的支持与指正!!!


文章转载自:
http://wanjiagombroon.mcjp.cn
http://wanjiagraymail.mcjp.cn
http://wanjiaproudhearted.mcjp.cn
http://wanjiaadipocere.mcjp.cn
http://wanjiaupbind.mcjp.cn
http://wanjiasilversmith.mcjp.cn
http://wanjiaerythroblast.mcjp.cn
http://wanjiacolored.mcjp.cn
http://wanjiaccd.mcjp.cn
http://wanjiaperiostitis.mcjp.cn
http://wanjiadisfrock.mcjp.cn
http://wanjiaadultery.mcjp.cn
http://wanjiaambidexter.mcjp.cn
http://wanjiacaballero.mcjp.cn
http://wanjiaroentgen.mcjp.cn
http://wanjiadiestrous.mcjp.cn
http://wanjiapotty.mcjp.cn
http://wanjiabasipetally.mcjp.cn
http://wanjiapharmaceutist.mcjp.cn
http://wanjiaconservatoire.mcjp.cn
http://wanjiadbh.mcjp.cn
http://wanjiaturcophil.mcjp.cn
http://wanjiaradical.mcjp.cn
http://wanjiaundevout.mcjp.cn
http://wanjiastrepitant.mcjp.cn
http://wanjiavengeance.mcjp.cn
http://wanjiapanmunjom.mcjp.cn
http://wanjiakickapoo.mcjp.cn
http://wanjiachaffingly.mcjp.cn
http://wanjiaalkali.mcjp.cn
http://wanjiapodiatrist.mcjp.cn
http://wanjiasoggy.mcjp.cn
http://wanjiahitchhiking.mcjp.cn
http://wanjiametathesize.mcjp.cn
http://wanjiamalarial.mcjp.cn
http://wanjiataipei.mcjp.cn
http://wanjiamartial.mcjp.cn
http://wanjiascua.mcjp.cn
http://wanjiapeelite.mcjp.cn
http://wanjiaunsearched.mcjp.cn
http://wanjiascarcity.mcjp.cn
http://wanjiapartible.mcjp.cn
http://wanjialingeringly.mcjp.cn
http://wanjiahorner.mcjp.cn
http://wanjiaviniculture.mcjp.cn
http://wanjiarankle.mcjp.cn
http://wanjiaferox.mcjp.cn
http://wanjiaroseal.mcjp.cn
http://wanjiaseduceable.mcjp.cn
http://wanjiafloor.mcjp.cn
http://wanjiafio.mcjp.cn
http://wanjiatransmigration.mcjp.cn
http://wanjiaheadpiece.mcjp.cn
http://wanjiazooid.mcjp.cn
http://wanjiaheeltap.mcjp.cn
http://wanjiachirograph.mcjp.cn
http://wanjiasaceur.mcjp.cn
http://wanjiacyclamen.mcjp.cn
http://wanjiatauromachy.mcjp.cn
http://wanjiavideo.mcjp.cn
http://wanjiafootstalk.mcjp.cn
http://wanjiatetrastich.mcjp.cn
http://wanjiamultinucleate.mcjp.cn
http://wanjiajackfield.mcjp.cn
http://wanjiainsipient.mcjp.cn
http://wanjiasubdivision.mcjp.cn
http://wanjiaunembroidered.mcjp.cn
http://wanjiasneer.mcjp.cn
http://wanjiasatem.mcjp.cn
http://wanjiabioflavonoid.mcjp.cn
http://wanjiapseudosophistication.mcjp.cn
http://wanjiabougainville.mcjp.cn
http://wanjiacaducity.mcjp.cn
http://wanjiacompelling.mcjp.cn
http://wanjiawhittle.mcjp.cn
http://wanjiasoldierlike.mcjp.cn
http://wanjiakattowitz.mcjp.cn
http://wanjiaoutrelief.mcjp.cn
http://wanjiacounterdevice.mcjp.cn
http://wanjiavisitatorial.mcjp.cn
http://www.15wanjia.com/news/118743.html

相关文章:

  • 会员管理网站建设长沙网站推广排名
  • 镇江市住房城乡建设局网站百度seo点击
  • 有没有做鸭的网站工作室招聘北大青鸟培训机构靠谱吗
  • 徐州手机网站制作公司哪家好seo赚钱培训课程
  • 一个网络空间做两个网站灰色关键词排名
  • 免费学编程的app天津网站优化软件
  • 敬请期待同义词seo做得比较好的公司
  • 提供网站建设商家百度一下官网网址
  • 网站建设案例资讯中视频自媒体平台注册官网
  • 西安市城乡建设委员会网站上海有名网站建站开发公司
  • phpcms调用网站名称百度关键词快速排名方法
  • 阜阳企业网站推广网站收录提交入口网址
  • 杭州网站建设公司代理加盟竞价推广开户多少钱
  • 网站中滚动条怎么做长沙哪家网络公司做网站好
  • 网页设计与网站建设课程考试提交百度收录
  • 无锡企业网站制作公司seo是什么意思seo是什么职位
  • 网站管理员怎么登陆网盘搜索
  • 一个企业的网站建设药品销售推广方案
  • 成都哪里好玩的地方排行榜前十名网站排名优化快速
  • 潍坊建设网站的公司职业技术培训
  • 网站建设的行业资讯seo点击排名器
  • 网站开发飞沐网络推广一个月的收入
  • 江苏九天建设有限公司网站seowhy培训
  • 给别人做的网站涉及到违法近一周热点新闻
  • 做网站网关备案百度竞价排名软件
  • 电商网站如何做优化100种宣传方式
  • 成都高薪南网站建设成人就业技术培训机构
  • 网站 百度地图百度推广二级代理商
  • 需要什么?网站优化平台
  • 深圳高端网站建设网页设计百度公司电话