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

网站建设策划文案网站优化分析

网站建设策划文案,网站优化分析,无锡朝阳网站建设,网站要怎么做才能获得市场份额快排排序是非常快的,但是有一种情况快排是无法进行的。 912. 排序数组 - 力扣(LeetCode) 这道题看上去没什么问题,但是如果我们用快排去提交的话,发现快排其实是被针对了的。 有一个样例是这样的。如果我们按照快排的…

快排排序是非常快的,但是有一种情况快排是无法进行的。

912. 排序数组 - 力扣(LeetCode)

这道题看上去没什么问题,但是如果我们用快排去提交的话,发现快排其实是被针对了的。

有一个样例是这样的。如果我们按照快排的思想,right指针将一路狂奔到left指针这里回合,然后每次分割区间都是只分割出去一个数,这样就会造成时间超限。

所以我们将快排进行优化,实现三路划分

原来的快排思想是将小于等于key的放在左边,将大于等于key的放在右边,这样形成了两个区间。

三路划分的思想其实就是,将小于key的放在左边,将大于key的放在右边,将等于key的放在中间。

然后分割区间的时候,左边小于key的一个,右边大于key的一个,中间的就不用再动了

具体操作的方法:

还是left在左侧,right在右侧,current遍历。

当current遇到比key小的,就将current下的值和left交换,然后将left++,current++。(因为left为和key相等的值,交换过后left++,相当于是left左边是比key小的值,left永远指向和key相等的值)

当current遇到和key相等的值时,就将current++,继续遍历。

当current遇到比key大的值,就将current下的值和right交换,然后将right--(不先管right原位置的值的大小,先交换,此时right--后,right右侧的值则永远都是比key大的值,current不动,因为不确定交换后的值的大小。进行新一轮的比较之后,再决定去留)

代码:


/*** Note: The returned array must be malloced, assume caller calls free().*/int GetMidIndex(int* a, int left, int right)
{int mid = (left + right) / 2;if (a[left] < a[mid]){if (a[mid] < a[right])return mid;else if (a[right] < a[left]){return left;}else return right;}else{if (a[mid] > a[right])return mid;else if (a[left] < a[right])return left;else return right;}}void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}void QuickSort(int* a, int begin, int end)
{if (begin >= end){  return;}int left = begin;int current = left+1;int right = end;int midi = GetMidIndex(a, left, right);Swap(&a[left], &a[midi]);int key = a[left];while (current <= right){if(a[current] > key){Swap(&a[current], &a[right]);right--;}else if(a[current] < key){Swap(&a[current], &a[left]);left++;current++; }else current++;}QuickSort(a, begin,left-1);QuickSort(a, right+1, end);
}
int* sortArray(int* nums, int numsSize, int* returnSize){QuickSort(nums,0,numsSize-1);*returnSize = numsSize;return nums;
}

提交还有样例没过

做出三路划分后,这个样例针对的是快排的三数取中(GetMidIndex)方法。

但是如果去掉三数取中方法,当遇到接近有序的序列后就会超时。所以我们不能用普通的三数取中方法。

 int GetMidIndex(int* a, int left, int right)
{int mid = left+(rand()%(right-left));      //中间的数不再固定。if (a[left] < a[mid]){if (a[mid] < a[right])return mid;else if (a[right] < a[left]){return left;}else return right;}else{if (a[mid] > a[right])return mid;else if (a[left] < a[right])return left;else return right;}}

这样,这道题就可以用快排的方法提交了。

http://www.mmbaike.com/news/33362.html

相关文章:

  • 网站怎么做要多少钱友情链接的网站有哪些
  • 自学网站的建设seo综合查询怎么用的
  • 装修网站怎么做百度收录查询入口
  • pc网站建设宁波seo教程app推广
  • 苏州网站建设logo网络推广是诈骗吗
  • 163网站源码关键词排名监控
  • 郑州做网站 熊掌号深圳推广公司有哪些
  • 惠州做网站 百度优化权重查询工具
  • 东莞网站建设制作本溪seo优化
  • 企业网站的web应用环境通常有几种组合什么是搜索引擎优化推广
  • 怎么用公司网站做公司域名多个网络流量统计工具
  • java网站开发培训seo公司怎么推广宣传
  • 网站怎么做rss鹤壁seo公司
  • 富阳网站建设电商平台发展现状与趋势
  • 温州网络网吉安seo招聘
  • 网站开发服务器种类搜索引擎优化排名
  • uc做购物网站交换链接网站
  • 教做视频的网站海外网站cdn加速
  • 毕业设计音乐网站开发背景友情链接交换标准
  • 怎么做新网站的推广百度云盘官网
  • 发卡网站源码下载百度官方客服平台
  • 哪些网站可以做翻译兼职百度极速版客服电话
  • 如何跟客户销售做网站seo技术博客
  • 玉林住房和城乡建设局网站官网seo是什么意思中文
  • 个人网站建设小江线上商城的推广方案
  • 金耀网站建设小吃培训去哪里学最好
  • 用ps设计网站做多大的宁波网站推广
  • wap版网站 加app提示互联网推广平台有哪些
  • 湖南网站优化外包费用中国宣布取消新冠免费治疗
  • 静态网站seo怎么做百度网页版登录入口