时间:2021-05-20
本文实例展示了C语言实现最大间隙问题的方法,对于算法的设计有一定的借鉴价值。分享给大家供大家参考。具体如下:
问题描述如下:
给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值,要求设计线性的时间算法。
解决思路:
注意题中要求设计线性时间算法。如果没有这个要求,就可以先排序,找出来就很方便。但我们知道排序最优良的算法的时间效率也是nlogn的。所以不可行。
采用一种区间算法。具体步骤就不说了,给出C语言代码,有注释加以说明。
具体实现代码如下:
#include "stdio.h"#include "stdlib.h"#define MAX 10000float findmin(float data[],int n){ int index,i; float min,temp; temp=data[0]; for(i=1;i<n;i++){ if(data[i]<temp){ temp=data[i]; index=i; } } min=data[index]; return min;}float findmax(float data[],int n){ int index,i; float max,temp; temp=data[0]; for(i=1;i<n;i++){ if(data[i]>temp){ temp=data[i]; index=i; } } max=data[index]; return max;}void initial(int n,int count[],float low[],float high[],float min,float max){ int i; for(i=0;i<n;i++){ count[i]=0; //区间是否有数据存入 low[i]=max; //将区间的左端赋值最大值 high[i]=min; //将区间的右端复制最小值 }}void dataIn(float m,int count[],float low[],float high[],int n,float data[],float min){ int i,location; for(i=0;i<n;i++){ location=int((data[i]-min)/m)+1; //判断数据进入哪个区间:按照等分区间,数据与最小值的差与区间大小的比值+1就是区间编号 if(location==n) location--; count[location]++; //有数据存入,计数值加1 if(data[i]<low[location]) //如果数据比左端值小,则作为左端值 low[location]=data[i]; if(data[i]>high[location]) //如果数据比右端值大,则作为右端值 high[location]=data[i]; }}float findMaxGap(int n,float low[],float high[],int count[]){ int i; float maxgap,dhigh,temp; dhigh=high[1]; for(i=2;i<n;i++){ if(count[i]){ temp=low[i]-dhigh; if(maxgap<temp) maxgap=temp; dhigh=high[i]; } } return maxgap;}int main(){ float data[MAX]; int n,i=0; float min,max; float m,maxgap; float low[MAX],high[MAX]; int count[MAX]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%f",&data[i]); min=findmin(data,n); max=findmax(data,n); m=(max-min)/(n-1); initial(n,count,low,high,min,max); dataIn(m,count,low,high,n,data,min); maxgap=findMaxGap(n,low,high,count); printf("%.1f",maxgap); system("pause"); return 0;}感兴趣的朋友可以测试运行本文实例以加深理解。相信本文所述对大家C程序算法设计的学习有一定的借鉴价值。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了基于C语言实现的迷宫算法。分享给大家供大家参考,具体如下:利用c语言实现迷宫算法,环境是vc++6.0.#include#include#incl
本文实例为大家分享了C语言实现哈夫曼树的具体代码,供大家参考,具体内容如下//哈夫曼树C语言实现#include#includetypedefstructHuf
本文实例为大家分享了C语言实现24点游戏的具体代码,供大家参考,具体内容如下参考文章:C语言实现经典24点算法将算法实现改成C语言,并可在linux服务器上运行
本文实例为大家分享了C语言实现航班管理系统的具体代码,供大家参考,具体内容如下#include#include#
数据结构C语言实现循环单链表的实例实例代码://=========杨鑫========================////循环单链表的实现#include#