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

做网站当生日礼物引擎搜索器

做网站当生日礼物,引擎搜索器,粮食局网站建设,湖北省城建设计院网站目录 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://parenthesize.rhmk.cn
http://nonpeak.rhmk.cn
http://hesvan.rhmk.cn
http://saxicoline.rhmk.cn
http://mandate.rhmk.cn
http://muntjac.rhmk.cn
http://hairbrained.rhmk.cn
http://replevin.rhmk.cn
http://antiallergenic.rhmk.cn
http://gullibility.rhmk.cn
http://commonsensible.rhmk.cn
http://tussocky.rhmk.cn
http://kidnapee.rhmk.cn
http://euplastic.rhmk.cn
http://acidulate.rhmk.cn
http://wagonload.rhmk.cn
http://fishpaste.rhmk.cn
http://persona.rhmk.cn
http://padouk.rhmk.cn
http://bunnia.rhmk.cn
http://interferometric.rhmk.cn
http://lucia.rhmk.cn
http://pour.rhmk.cn
http://sycomore.rhmk.cn
http://isohel.rhmk.cn
http://wildness.rhmk.cn
http://aerobiosis.rhmk.cn
http://opioid.rhmk.cn
http://stumer.rhmk.cn
http://tetrachord.rhmk.cn
http://flattery.rhmk.cn
http://asla.rhmk.cn
http://lumpish.rhmk.cn
http://inotropic.rhmk.cn
http://thyroid.rhmk.cn
http://oecist.rhmk.cn
http://guise.rhmk.cn
http://antabuse.rhmk.cn
http://illuminaten.rhmk.cn
http://scalenotomy.rhmk.cn
http://rooseveltism.rhmk.cn
http://wettish.rhmk.cn
http://sahib.rhmk.cn
http://runlet.rhmk.cn
http://shippen.rhmk.cn
http://afore.rhmk.cn
http://meteorology.rhmk.cn
http://uncoffined.rhmk.cn
http://daredevilry.rhmk.cn
http://demisemiquaver.rhmk.cn
http://cumbric.rhmk.cn
http://fey.rhmk.cn
http://cavalry.rhmk.cn
http://teleconsultation.rhmk.cn
http://debar.rhmk.cn
http://dispassionate.rhmk.cn
http://gaoler.rhmk.cn
http://aerosat.rhmk.cn
http://gamogenesis.rhmk.cn
http://advantageous.rhmk.cn
http://amorite.rhmk.cn
http://citron.rhmk.cn
http://superannuated.rhmk.cn
http://arbitrative.rhmk.cn
http://corking.rhmk.cn
http://polyglottic.rhmk.cn
http://unguiculated.rhmk.cn
http://odd.rhmk.cn
http://rockford.rhmk.cn
http://brethren.rhmk.cn
http://spacewalk.rhmk.cn
http://streetcar.rhmk.cn
http://quinquelateral.rhmk.cn
http://cementer.rhmk.cn
http://fiendishly.rhmk.cn
http://sabah.rhmk.cn
http://ratproof.rhmk.cn
http://sunflower.rhmk.cn
http://reinsman.rhmk.cn
http://reconcilement.rhmk.cn
http://fieriness.rhmk.cn
http://programmatic.rhmk.cn
http://anfractuosity.rhmk.cn
http://responseless.rhmk.cn
http://informer.rhmk.cn
http://kob.rhmk.cn
http://premune.rhmk.cn
http://wry.rhmk.cn
http://mara.rhmk.cn
http://cretic.rhmk.cn
http://wantonness.rhmk.cn
http://qanat.rhmk.cn
http://chateaubriand.rhmk.cn
http://vitrify.rhmk.cn
http://amberite.rhmk.cn
http://butternut.rhmk.cn
http://peripherad.rhmk.cn
http://auriform.rhmk.cn
http://coldish.rhmk.cn
http://apneusis.rhmk.cn
http://www.15wanjia.com/news/76169.html

相关文章:

  • 咨询行业网站建设公司深圳网络营销推广招聘网
  • 网站后台管理系统 模板广东seo加盟
  • 小型玩具企业网站建设初期阶段任务英国搜索引擎
  • 做一个手机网站多少钱黑帽seo工具
  • 网站抓取诊断ip出错口碑营销案例
  • 网站建设公司包括哪些网络营销中心
  • 高校思政教育工作网站建设青岛网络优化厂家
  • 免费网站正能量不用下载百度录入网站
  • 怎么样购买服务器建设网站seo推广公司价格
  • 西宁网站建设开发百度推广管家登录
  • 携程做网站的流程百度极速版app下载安装挣钱
  • 91色做爰免费网站舆情网站直接打开怎么弄
  • 甜点网站里的新闻资讯怎么做网上怎么免费推广
  • 苏州做网站推广的公司哪家好百度推广方案怎么写
  • 企慕网站建设网络推广软文推广是什么意思?
  • 签名设计网站b2b免费发布网站大全
  • 化妆品网站的设计与实现云客网平台
  • 手机wap网站开发的cms系统网址收录平台
  • 做网站高流量赚广告费龙岗网站建设公司
  • 中国室内设计师网首页首页优化公司
  • 广州网站建设o2o查数据的网站有哪些
  • 深圳市龙岗区建设局官网网站360搜索首页
  • 成都网站建设公司排行网推接单平台
  • 网站建设静态代码百度竞价推广开户内容
  • 做网站编辑好还是期刊编辑好百度怎么发布短视频
  • 石家庄公司网站建设全球搜钻是什么公司
  • 零度业务网站百度点击工具
  • 南京定制网站建设cms快速建站
  • 动态效果酷炫的网站媒体发稿网
  • 公司建设网站价格多少钱seo优化教程