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

广州住房和城乡建设局网站网站建立方案

广州住房和城乡建设局网站,网站建立方案,测速网站怎么做,网站搭建软件d1.快速排序#xff08;递归#xff09; 快速排序是 Hoare 于 1962 年提出的一种二叉树结构的交换排序方法#xff0c;其基本思想为#xff1a; 任取待排序元素序列中 的某元素作为基准值#xff0c;按照该排序码将待排序集合分割成两子序列#xff0c;左子序列中所有元素…1.快速排序递归 快速排序是 Hoare 于 1962 年提出的一种二叉树结构的交换排序方法其基本思想为 任取待排序元素序列中 的某元素作为基准值按照该排序码将待排序集合分割成两子序列左子序列中所有元素均小于基准值右 子序列中所有元素均大于基准值然后最左右子序列重复该过程直到所有元素都排列在相应位置上为止 。 void QuickSort(int* a, int begin, int end) {if (begin end)return;int keyi PartSort3(a, begin, end);//[begin,keyi-1]keyi[keyi1,end]QuickSort(a, begin, keyi - 1);QuickSort(a, keyi 1, end); } 上述为快速排序递归实现的主框架发现与二叉树前序遍历规则非常像同学们在写递归框架时可想想二叉 树前序遍历规则即可快速写出来后序只需分析如何按照基准值来对区间中数据进行划分的方式即可。 将区间按照基准值划分为左右两半部分的常见方式有 1. hoare 版本 2. 挖坑法 3. 前后指针版本 我来给大家讲解一下前后指针版本因为这个代码简洁但是不太好理解。 首先创建一个变量keyi保存left的值keyileft然后创建后指针prev开始也是在left位置prevleft前指针cur在prev前一个位置curprev1然后写一个while循环结束条件是curright,意味着cur越界了进入循环首先判断一下a[cur]和a[keyi]的大小如果a[cur]大则再判断prev是否等于cur如果等于则不用交换cur,如果两个条件都满足则交换a[prev]和a[cur]因为prev已经所以直接交换即可。循环结束之后再交换a[key]和a[prev]. cur的作用就是和prev拉开距离然后将大于a[keyi]的值放到右边的部分最后交换a[keyi]和a[prev]就完成了部分排序。 int PartSort(int* a, int left, int right) {int keyi left;int prev left, cur prev 1;while (cur right){if (a[cur] a[keyi] (prev) ! cur){Swap(a[prev], a[cur]);}cur;}Swap(a[prev], a[keyi]);return prev; } void QuickSort(int* a, int begin, int end) {if (begin end)return;int keyi PartSort3(a, begin, end);//[begin,keyi-1]keyi[keyi1,end]QuickSort(a, begin, keyi - 1);QuickSort(a, keyi 1, end); } 2.快速排序优化 2.1三数取中 三数取中是取大小位于中间的值放到最左边这样可以防止快排中最坏的情况出现O(n*2)也就是要排序的这一组数据接近有序或者就是有序的情况那么使用了三数取中后这种最坏的情况就变成了最好的情况. //三数取中 int GetMidi(int* a, int left, int right) {int midi (left right) / 2;if (a[left] a[midi]){if (a[midi] a[right]){return midi;}else if (a[right] a[left]){return left;}else{return right;}}else//a[left]a[midi]{if (a[left] a[right]){return left;}else if (a[midi] a[right]){return midi;}else{return right;}} } 2.2小区间优化  当区间较小时可以使用插入排序来进行优化因为插入排序最坏的情况就是要插入的数都比前面的数小插入排序在小区间里面比较不错的一种排序算法在快速排序里面使用插入排序可以提高很多的效率。 void QuickSort2(int* a, int begin, int end) {if (begin end)return;if ((end - begin 1) 10){int keyi PartSort3(a, begin, end);//[begin,keyi-1]keyi[keyi1,end]QuickSort(a, begin, keyi - 1);QuickSort(a, keyi 1, end);}else{InsertSort(abegin, end - begin 1);} } 3.快速排序非递归 非递归的快速排序可以借助一个栈来实现先入右边的值再入左边的值然后每次取值都是先取栈顶也就是左边的值然后再进行部分排序直到返回的keyi-1left,就代表着左边排序完成右边返回的keyi1right,代表右边的部分排序完成。 void QuickSortNonR(int* a, int begin, int end) {ST st;STInit(st);STPush(st, end);STPush(st, begin);while (!STEmpty(st)){int left STTop(st);STPop(st);int right STTop(st);STPop(st);int keyi PartSort3(a, left, right);if (keyi 1 right){STPush(st, right);STPush(st, keyi1);}if (keyi - 1 left){STPush(st, keyi-1);STPush(st, left);}}STDestroy(st); } 今天的分享到这里就结束了感谢大家的阅读
http://www.pierceye.com/news/432314/

相关文章:

  • 做招聘网站需要多少钱als冰桶挑战赛的网络营销方式
  • wordpress单位内网做网站云南省文山州网站建设
  • 单页网站制作视频教程四川餐饮培训学校排名
  • 微信公众平台网站建设wordpress中英切换
  • 万网x3主机l系统放两个网站自学设计的网站
  • 网站微信建设运维经验分享图营销app
  • 西安网站开发软件常州注册公司
  • 和网站建设相关的行业企业网络规划设计方案
  • 风中有朵雨做的云网站观看开网店教程
  • 网站建设与管理教学视频教程服务器绑定网站打不开
  • 百度云建站WordPress开发新客户的十大渠道
  • 南宁比优建站视屏网站的审核是怎么做的
  • 怎样建设尧都水果网站免费手机网站建站系统
  • 全网营销提供seo服务
  • 吕梁网站设计服务器网站建设维护合同
  • 网站轮播图片怎么做高校网站建设模板
  • 易语言做返利网站企业培训考试平台官网
  • 天津做不锈钢的网站做网站要几个部门组成
  • 宿迁集团网站建设用dw制作一个网站
  • 网站创建二级域名网络营销到底是个啥
  • 银州手机网站建设做网站前台模型要做什么呢
  • 做彩票网站推广网站建设培训方案
  • o2o网站建设多少钱昆山专业网站建设
  • c语言自学免费网站网站制作职业
  • 免费刷赞网站推广qq免费有哪些网页设计软件
  • 如何设计网站的首页做海鲜代理在什么网站
  • 网站分析的优劣势苏州网络推广企业
  • 威海网站建设公司施工企业成本核算方法
  • 网站群集约化建设cc域名做门户网站
  • 怎么看一个网站做的好不好北京企业网站推广