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

广州网站优化建设/网页游戏推广平台

广州网站优化建设,网页游戏推广平台,重庆天气专业网站建设,网站前期规划报告快速排序算法采用了分治法以及递归作为解决问题的思想。在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以…

快速排序算法采用了分治法以及递归作为解决问题的思想。在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

快速排序算法

算法思路

快速排序算法的思路是,先在arr[s,t]中随意选取一个点作为排序的基准点x,再确定基准点在数组中的下标,一定下标i确定后,该下标i左边的所有元素均小于x,右边的所有元素均大于x.此时采用递归继续对数组[s,i-1]以及[i+1,t]做快速排序,左右区间不再合法即可退出循环。分治的思想就体现在同时对基准点的左右区间再次做快速排序上。

找基准点

首先,姑且认为区间左端的第一个元素就是基准点x,再定义两个下标i与j分别记录区间的原始左端点与右端点,先从右端点开始往左查找如果arr[j]>=x且i<j,则j--,这样能够确保基准点右边的元素都大于或等于基准点若遇到arr[j]<x,则将arr[j]放到基准点原来的位置;紧接着下标i往右查找,如果arr[i]<=x且i<j,则i++,这样能够保障基准点左边的元素都小于或等于基准点;若遇到arr[i]>x,则将arr[i]放到上次j的位置;重复上述操作,直到i==j,将基准点放在arr[i]上,即arr[i]=x.

代码实现

#include<iostream>
using namespace std;
#include<algorithm>//快速查找算法,查找第k小的元素void quick_sort(int*arr,int l,int r){//递归退出条件if(l>=r){return ;}int i = l;int j = r;//以区间最左侧的元素最为基准点int x = arr[l];//调整基准点while(i<j){//找到一个比基准点小的数while(i<j && arr[j]>=x)  j--;if(i<j){//将arr[j]放到最左边arr[i] = arr[j];} //找一个比基准点大的数while(i<j && arr[i]<=x)     i++;if(i<j){arr[j] = arr[i];}}    arr[i] = x;//调整基准点//对基准点的左区间排序quick_sort(arr,l,i-1);//对基准点的右区间排序quick_sort(arr,i+1,r);
}
void Myprint(int val){cout<<val<<" ";
}int main(){int arr[12]={10,2,1,3,6,5,4,7,9,8,42,99};int len = sizeof(arr)/sizeof(int);quick_sort(arr,0,len-1);for_each(arr,arr+len,Myprint);cout<<endl;return 0;
}

快速定位算法

问题引入

已知定长为len的int数组,需要查出第k小的元素。

算法思路

借鉴快速排序的思路,基准点必定大于或等于其左区间的元素小于或等于右区间的元素,因此找到一个下标为k-1的基准点等价于找到第k小的元素。我们只需要在原快速排序算法删改一些代码即可获得快速排序算法的代码实现。

代码实现

#include<iostream>
using namespace std;//快速查找算法,查找第k小的元素int quick_select(int*arr,int l,int r, int k){int i = l;int j = r;//以区间左端点为基准点int x = arr[l];//调整基准点while(i<j){//找到一个比基准点小的数while(i<j && arr[j]>=x)  j--;if(i<j){//将arr[j]放到最左边arr[i] = arr[j];} //找一个比基准点大的数while(i<j && arr[i]<=x)     i++;if(i<j){arr[j] = arr[i];}}    arr[i] = x;//调整基准点//判断基准点x的下标i是否与k-1相同if(i==k-1) return arr[i];else if(i<k-1)return quick_select(arr,i+1,r,k);elsereturn quick_select(arr,l,i-1,k);
}int main(){int arr[12]={10,2,1,3,6,5,4,7,9,8,42,99};int k  = 12;int len = sizeof(arr)/sizeof(int);cout<<quick_select(arr,0,len-1,k)<<endl;//答案无疑是99return 0;
}

可见,当i<k-1时,说明第k小的元素在基准点的右侧,只需要再查找基准点的右侧区间;当i>k-1时,说明第k小的元素在基准点的左侧,只需要再查找基准点的左侧区间

http://www.jmfq.cn/news/5355631.html

相关文章:

  • 母婴网站建设初衷/什么是seo
  • 云南照明网站建设/免费独立站自建站网站
  • 安徽网站建设外贸/新站整站快速排名
  • 淘宝建设网站首页/互动营销经典案例
  • mac os网站建设/国内新闻大事20条简短
  • 永泰县建设局网站/百度竞价开户费用
  • 中国建设银行新闻网站/宁波seo关键词
  • 建设农产品网络营销网站/搜索引擎查重
  • 玩具网站建设方案/网站推广优化
  • 选择网站建设公司应该注意什么/seo哪家公司好
  • 网站的建设背景/百度客户管理系统登录
  • 学院宣传网站建设简介/色盲眼镜
  • 企业内网 网站建设的解决方案/seo快速优化报价
  • 营销型网站建设排名/武汉seo首页优化技巧
  • 南昌网站建设优化/顾问式营销
  • 西安网站建设动力无限/友情链接是免费的吗
  • 网站建设及数据分析/设计网站用什么软件
  • 会议网站建设方案/百度明星人气榜排名
  • 营销网站建设培训学校/企业网站怎么推广
  • 四川城乡建设部网站首页/搜索推广渠道
  • 北京市建设局网站首页/外贸平台排名
  • 无锡赛孚建设工程有限公司网站/舆情监测系统排名
  • 鲜花店网站建设的规模设想/天津seo排名公司
  • 网站建设 数据上传 查询/网络服务商在哪咨询
  • 网站了建设/小米的推广软文
  • 口碑好的网站建设服务/网站查询ip地址查询
  • 为什么建设部网站进不去/最吸引人的营销广告文案
  • 网站建设的需求是什么/网络推广引流是做什么工作
  • 河南专业网站建设公司/网上营销培训课程
  • 家居网站建设营销推广/哪个公司网站设计好