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

网站建设自助建站制作免费的编程自学软件

网站建设自助建站制作,免费的编程自学软件,建材网站做环保类型思路,网站策划包括哪些内容"你经过我每个灿烂时刻,我才真正学会如你般自由" 前些天有些无聊,想试试自己写的快排能否过leetcode上的排序算法题。结果是,不用截图可想而知,肯定是没过的,否则也不会有这篇文章的产出。 这份快排算法代码…

"你经过我每个灿烂时刻,我才真正学会如你般自由" 


         前些天有些无聊,想试试自己写的快排能否过leetcode上的排序算法题。结果是,不用截图可想而知,肯定是没过的,否则也不会有这篇文章的产出。

        这份快排算法代码在面对大量重复数的时候,时间复杂度会下降到O(n^2),这也是为什么leetcode显示最后会超时。所以如何解决呢?也许在此之前,可以先回顾回顾快排三步核心算法步骤。

——前言


快排的三个核心算法

● HOARE版

        这是最早的版本,也叫做左右指针法。不过这个算法需要值得注意的是一个地方。排升序时,一定是需要右指针先动,相反如果是排降序,则是左指针先动。        

int PartSort1(vector<int>& nums, int l, int r)
{// 左右指针法int key = nums[l];int left = l;int right = r;while (left < right){// 这里需要注意取等 // 如果不取等可能陷入死循环while (left < right && nums[right] >= key){right--;}while (left < right && nums[left] <= key){left++;}if (left < right) {swap(nums[left], nums[right]);}}// 处理keyiswap(nums[left], nums[l]);return left;
}

        我们对上述例子进行排序后的代码为:

● 挖坑法

        

int PartSort2(vector<int>& nums, int l, int r)
{int key = nums[l];int hole = l;int left = l, right = r;while (left < right){// 右边找小 填左坑while (left < right && nums[right] >= key){right--;}// 填坑swap(nums[right], nums[hole]);hole = right; // 新坑while (left < right && nums[left] <= key){left++;}swap(nums[left], nums[hole]);hole = left; // 新坑}// hole即为最终落脚点return hole;
}

        

● 前后指针法

        最后的前后指针法,也在前言中用到,这里不做多的解释。

int PartSort3(vector<int>& nums, int l, int r)
{int key = nums[l];int prev = l, cur = l + 1;while (cur <= r){// 找小if (nums[cur] < key && ++prev != cur){// prev指向的一定是比key大的数swap(nums[prev], nums[cur]);}cur++;}swap(nums[prev], nums[l]);return prev;
}

        


快速选择排序

        可是,你使用上述的不管哪种算法,都无法跑过leetcode上面的题,都会在重复数的情况下超时!这里我们可以用到归并分治的思想,如果将一个无序数组排序成有序数组,选定其中一个数作为key,可以将这个数组分为三部分:

    int getRandom(vector<int>& nums, int l, int r){int keyi = rand();return nums[keyi % (r-l+1) + l];} void qsort(vector<int>& nums, int l, int r){if(l < r){int key = getRandom(nums,l,r);// 数组分三块// 先让left、right指向非法区域int i = l,left = l-1,right = r+1;// [i,right]是未处理区域while(i < right){if(nums[i] < key) swap(nums[++left],nums[i++]);else if(nums[i] == key) i++;else swap(nums[--right],nums[i]);}// 递归处理其他区间qsort(nums,l,left);qsort(nums,right,r);}}

        我们终于是可以通过啦~


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

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

相关文章:

  • 重庆网站模版建设网站关键词都没有了
  • 青岛网站制作机构一步步教会你怎么做网站
  • 怎样在百度上作网站推广泰安最新通知今天
  • 大企业网站建设公司电子商务网站建设购物车
  • 郑州网站备案奉贤建设机械网站
  • 广州网站优化排名哪家好中文安卓开发软件
  • 网上做效果图网站有哪些软件有哪些品牌建设的过程
  • 能打开的a站网站安全优化
  • 制作公司网站的规划设计网站官网有哪些
  • 临清聊城网站优化有没有和小孩做的网站
  • 做购物商城网站设计四川省建设工程质量安全监督总站网站
  • 商丘网站制作报价信赖赛憬科技上海500强企业排名
  • 做微商如何网站推广怎么样提高网站排名
  • 专业社交网站建设公司两个WordPress文章同步更新
  • 湖南郴州建设局网站腾讯企业邮箱官网入口
  • 英文网站有哪些高端全屋定制十大名牌排行榜
  • 东莞气缸东莞网站建设高权重网站出售
  • 上海做电子商务网站的公司电器网站模板
  • php网站开发案例论文扬州注册公司
  • 公司网站集资网站开发人员犯法么做品牌文化的网站
  • 怎么做自己的优惠券网站dede 网站地图生成
  • 唐山网站建设公司哪家好win10 中国建设银行网站
  • 做瑜珈孕妇高清图网站做网站用什么前端框架
  • 内容电商网站有哪些使用wordpress的企业
  • 网站开发用什么架构桐梓网站开发
  • 河北企业网站制作seo算法培训
  • 网站ico如何添加2个wordpress
  • discuz 科技网站模板下载秦皇岛黄金海岸收费吗
  • 做旅行网站的意义网站交互方式
  • 建自己的网站30个成功的电子商务网站设计