线性时间选择实验

线性时间选择

给定n个元素和一个整数k,要求用O(n)时间找出这n个元素中第k小元素。

#include<iostream>
#include<algorithm>
using namespace std;
int select(int a[],int l,int r,int k);
int med_select(int a[], int l,int r);
int position(int a[],int l,int r,int m);
int main()
{
	int n,k;   
	cout<<"请输入要输入的元素个数: ";
	cin>>n;
	int *a = new int[n+1];
	cout<<"请输入"<<n<<"个元素: ";
	for(int i = 1 ; i <= n ;i++)
	{
		cin>>a[i];
	 }  
	cout<<"请输入 K : ";
	cin>>k;
	cout<<"第 "<<k<<" 小的元素是"<<select(a,1,n,k)<<endl;
	delete []a; 
	return 0;
 } 
 int select(int a[],int l,int r,int k)
{
	if(l<r)
	{
		if(r-l+1<=5)
		{
			
			int *arr = new int[r-l+1];
			for(int i = 0 ;i < r-l+1 ; i ++)
			{
				arr[i] = a[l+i];
			}
			sort(arr,arr+r-l+1);
			return arr[k-l];
		}
		else
		{
			int m = med_select(a,l,r);
			int p = position(a,l,r,m);
			if(p == k)
				return a[p];
			else if(p>k)
				return select(a,l,p-1,k);
			else if(p<k)
				return select(a,p+1,r,k);
		}
	}
	else
	{
		return a[l];
	}
}
int med_select(int a[], int l,int r)
{
		int size = r-l+1;  
		int median_num = size/5; 
		int **arr = new int *[median_num+1];
		for(int i = 0 ;i < median_num+1 ; i++)
			arr[i] = new int[5+1];
		int *median = new int[median_num];
		int jishu = 1;
		for(int i = 1 ; i < median_num+1; i++)
		{
			for(int j = 1 ; j < 5+1 ;j++)
			{	
				arr[i][j] = a[jishu++];
			}
			median[i] = select(arr[i],1,5,3); 
		}
		return select(median,1,median_num,median_num/2);
}

int position(int a[],int l,int r,int m)
{
	int x;    //x记录位置 
	
	for(int i = l ; i <= r ; i++)
	{
		if(a[i] == m)
		{
			x = i;
			break;
		}
	}
	
	int t = a[l];
	a[l] = a[x];
	a[x] = t; 
	
	int i = l,j = r;
	cout<<endl;
	while(i < j)
	{
		while(i<j && a[j] > m)
			j--;
		if(i<j)
		{
			a[i++] = a[j];
		} 	
		while(i<j && a[i] <= m)
			i++;
		if(i<j)
		{
			a[j--] = a[i];
		} 
			
	}
	a[i] = m;
	return i;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 线性恒流LED调光驱动电路设计实验是一种实验方法,旨在通过设计一个线性恒流电路来实现对LED灯的调光控制。 在LED调光过程线性恒流驱动电路能够提供恒定的电流给LED,从而保证LED的亮度稳定,避免因电流波动引起的亮度变化。该电路的设计需要考虑到输入电压范围、输出电流范围和调光范围等因素。 在实验,首先需要选择合适的电源电压和电流,以供给线性调光电路。其次,将LED与电路连接,使电流能够流通至LED。为了实现调光功能,可以在电路加入一个可调的电阻或变阻器,通过改变电阻的阻值来调节电流。 在实验,可以通过测量LED的亮度和输入电流的大小,来评估线性恒流LED调光驱动电路的性能。实验过程,可以逐步变化电源电压和电阻的阻值,观察LED的亮度变化情况。 实验结果可以得出线性恒流LED调光驱动电路的特性曲线,即输入电流与LED亮度的关系曲线。根据实验结果,我们可以评估电路的调光性能,并针对实际应用需求进行调整和改进。 通过线性恒流LED调光驱动电路实验的设计与实施,我们可以更好地理解恒流驱动电路的工作原理,以及调光控制的基本原理。这对于LED照明的应用和研究具有重要的参考意义。 ### 回答2: 线性恒流LED调光驱动电路设计实验是一种用于控制LED亮度的实验线性恒流驱动电路能够通过改变电流来调节LED的亮度,保证LED的工作电流恒定,从而确保LED的工作稳定性和寿命。 在设计实验,首先需要选择合适的线性恒流驱动芯片。驱动芯片通过测量LED上的电压降来实时调节电流,控制LED的亮度。接下来,需要设计电路来连接驱动芯片和LED。这个电路需要根据驱动芯片的引脚定义和要求进行布线,并加入适当的电阻、电容和滤波器来提高电路的稳定性和效果。 在实验,我们可以通过改变输入信号的电压和频率来调节LED的亮度。通过调整输入电压和频率,可以改变驱动电路的电流,从而使LED的亮度随之改变。此外,还可以利用PWM(脉冲宽度调制)技术来控制LED的亮度。PWM技术通过调整脉冲信号的占空比来控制驱动电路的电流,从而实现LED的亮度调节。 线性恒流LED调光驱动电路设计实验可以帮助我们了解LED的电流变化对亮度的影响,并且锻炼我们的电路设计和调试能力。通过实验,可以得到LED的亮度与电流、输入信号的关系,并进一步优化电路设计,实现更精确的亮度控制。同时,还可以在实验尝试不同的驱动芯片和电路布局,以及优化LED的散热设计,从而提高LED的工作效果和寿命。 ### 回答3: 线性恒流LED调光驱动电路设计实验是指设计一种能够恒流驱动LED并实现调光功能的电路。恒流驱动电路可以保证LED的电流恒定,从而提高LED的工作效果和寿命,而调光功能则能够实现根据需要调整LED的亮度。 首先,我们需要选择合适的LED,了解其额定工作电流和电压。根据LED的工作特性和实验要求选择合适的驱动芯片和电路元件。 其次,设计线性恒流驱动电路。线性恒流驱动电路通常由电流源和电流控制部分组成。电流源可以采用基于电流源晶体管的或基于运算放大器的设计。电流控制部分可以采用电阻、电容和运算放大器等元件组成的反馈回路进行控制。 然后,设计调光功能。调光功能可以通过改变电流源的工作状态来实现。常见的调光方法有PWM调光和线性调光。PWM调光通过控制LED的通断时间比来实现调光,而线性调光则通过改变电源电压或电流大小来实现调光。 最后,进行电路实验验证。实验过程可以通过测量LED的亮度和电流来判断驱动电路的效果。根据实际需求,可以调整电路参数来优化驱动效果。 总之,线性恒流LED调光驱动电路设计实验一个涉及LED基本特性、电路设计和实验验证的综合性实验。通过设计合适的电路,能够实现对LED的恒流驱动和调光功能,提高LED的使用效果和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值