C++减治法查找范围整数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二减治法查找范围整数
学院:计算机科学与技术专业:计算机科学与技术
学号:班级:姓名:
一、实验内容:
从包含n个整数的无序列表中输出第k1小到第k2小之间的所有整数,其中k1<=k2。分析时间复杂度。
二、算法思想:
减治法的基本思想:规模为n的原问题的解与较小规模(通常是n/2)的子问题的解之间具有关系:
(1)原问题的解只存在于其中一个较小规模的子问题中;
(2)原问题的解与其中一个较小规模的解之间存在某种对应关系。
由于原问题的解与较小规模的子问题的解之间存在这种关系,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。一旦建立了这种关系,就可以从顶至下(递归),也可以从底至上(非递归)的来运用。
减治法查找范围整数的思想:先把输入的无序列表中的每个整数都标记为1,用f1和f2存储每次查找的最大和最小的整数,并标记为0,作为删除。接着循环递归,直到将范围缩小到k1->k2.时就得到了所要的结果。
三、实验过程:
#include
using namespace std;
#define max 100
typedef struct Data
{
int data;
bool flag;
}Data,Mat[max];
Mat a;
void Found_k1_k2(Mat &a,int n,int k1,int k2)//用减治法查找无序列表中第k1到第k2小的整数
{
int x=0;
int y=n-1;
while(x
{
int temp;
int f1,f2;//存储最小和最大数的下标
f1=x;
f2=y;
for(int i=x; i<=y; i++)
{
if(a[f1].data>a[i].data)
f1=i;