收藏 分销(赏)

贪心算法实例.docx

上传人:仙人****88 文档编号:12006536 上传时间:2025-08-26 格式:DOCX 页数:3 大小:32.59KB 下载积分:10 金币
下载 相关 举报
贪心算法实例.docx_第1页
第1页 / 共3页
贪心算法实例.docx_第2页
第2页 / 共3页


点击查看更多>>
资源描述
实验一 分治与递归算法的应用 一、实验目的 1.掌握分治算法的基本思想(分-治-合)、技巧和效率分析方法。 2.熟练掌握用递归设计分治算法的基本步骤(基准与递归方程)。 3.学会利用分治算法解决实际问题。 二、实验内容 1.问题描述:线性时间选择 给定n个元素和一个整数k,要求用O(n)时间找出这n个元素中第k小元素。 2.算法描述: Stept1:数据的保存,首先将数据保存到数组e[num]中,并输入k值。 Stept2:选择第一个数据作为分界数据,将比它小的数据储存在它的左边,比它大的储存在右边,这样左右子集就是原问题的两个独立子问题,在用同样的方法解决这些子问题,直到每个子集只有一个数据,就完成了全部的排序。 Stept3:改写快速排序,记一趟快速排序后,分解出左子集中的元素个数为nleft,这选择问题是以下几种情况: (1) nleft=k-1,则分界数据就是选择问题的解。 (2) nleft>k-1,则选择问题的解继续在左子集中找。 (3) nleft<k-1, 则选择问题的解继续在右子集中找。 这样问题的规模就减小了。 3.测试数据 5 12 23 10 45 92 3 30 K值:3 4实验结果如图: 5关键代码: int partition(int e[],int i,int j) { int tag=e[i];//用第1个记录作为基准 ' while(i<j) { //从区间两端交替向中间扫描,直至i=j为止 while(i<j&&e[j]>=tag) j--; //从右向左扫描 e[i]=e[j]; while(i<j&&e[i]<=tag) i++; e[j]=e[i]; } e[i]=tag;//基准记录已被最后定位 return i; } int Seltct(int element[],int lw,int hi,int k) { if(lw==hi) return element[lw]; int q=partition(element,lw,hi);//调用quicksort里面的partition, q指向参考数 int nleft=q-lw+1; // l为左数组长度 if(k==nleft) return element[q]; if(k<nleft) return Seltct(element,lw,q,k); if(k>nleft) return Seltct(element,q+1,hi,k-nleft); } void main() { int i=1; int num; int k; int cn; cout<<"please input the num of element"<<endl; cin>>num; cout<<"please input the elements:"<<endl; int *e=new int[num]; while(i<=num) { cin>>cn; e[i]=cn; i++; } cout<<"请输入K值"; cin>>k; int mink=Seltct(e,1,num,k); cout<<"the k min num is:"<<mink<<endl; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服