当前位置:首页 » 操作系统 » 数组最小算法

数组最小算法

发布时间: 2022-04-01 17:20:09

⑴ 输入十个数,输出最大数,最小数,用C语言编写,用数组和常规语句两种算法,求大神

用数组的解法如下:

#include<stdio.h>
intmain(void)
{
floatfNum[10];
floatfMax,fMin;
inti;

printf("请输入10个数字:");
for(i=0;i<10;i++)
scanf("%f",&fNum[i]);

fMax=fNum[0];
fMin=fMax;
for(i=1;i<10;i++)
{
if(fMax<fNum[i])fMax=fNum[i];
if(fMin>fNum[i])fMin=fNum[i];
}
printf("最大数字是:%f 最小数字是:%f",fMax,fMin);
}

不用数组的解法如下:

#include<stdio.h>
intmain(void)
{
floatfTmp,fMax,fMin;
inti;

printf("请输入10个数字:");
scanf("%f",&fMax);
fMin=fMax;
for(i=1;i<10;i++)
{
scanf("%f",&fTmp);
if(fMax<fTmp)fMax=fTmp;
if(fMin>fTmp)fMin=fTmp;
}
printf("最大数字是:%f 最小数字是:%f",fMax,fMin);
}

留意题目,没说是“整数”,所以要用float类型,可以输入小数。

⑵ 用java实现在一个数组中找最小数的算法

Arrays.sort在SUN的VM上复杂度n*log(n)

任何排序都要至少遍历一次数组的,不遍历数组的话......恐怕没戏。

⑶ 几种查找数组的前K个最小值的算法

堆排序。
建堆需要n/2次下沉操作,提取最小的k个元素需要k次下沉操作,复杂度小于O(n + klogn)。
如果空间足够,可以采用基数排序,复杂度为O(n)。

⑷ Matlab找数组中最大最小元素算法 感谢 输入数组 输出最大最小元素

function [b,s]=maxmin(D)

%b为最大值,s为最小值
%D为N个元素的数组,找出数组D中最大最小元素

[b,s]=fun(D);
h=length(b);
while h>1
[b,~]=fun(b);
[~,s]=fun(s);
h=length(b);
end

function [A,B]=fun(N) %A为N/2个较小的数,B为N/2个较大的数
L=length(N);
r=mod(L,2);
if r==0
t=L/2;
M=reshape(N,2,t);
else
N1=[N,N(end)];
t=length(N1)/2;
M=reshape(N1,2,t);
end
A=zeros(1,t);
B=zeros(1,t);
for n=1:t
if M(1,n)>M(2,n)
A(n)=M(1,n);
B(n)=M(2,n);
else
A(n)=M(2,n);
B(n)=M(1,n);
end
end

例子
>> D=randi(100000000,1,10000000);
>> [b,s]=maxmin(D)
结果:
b =

99999991

s =

3

⑸ 编写一个子过程,求一维数组中最小的数

我是个学生 呵呵 练练手 可能是写错 好久没用了。。。。呵呵

main()
{
int a[10],i,x;
i=0;
printf("%d",&a[i]);
x=a[i];
for(i=1;i<=10;i++)
{
printf("%d",&a[i]);
if(a[i]<a[i-1])
x=a[i];
}
printf("%d",x);
}
/* 我写的是 数组 10个元素,也可以改成当输入什么时退出 */

[我写完没看哦~~~ 错了不管]
*******************************************************
不管 我要分~ 我白写拉?
*******************************************
回答者:werewolf1989 - 魔法师 四级 6-30 23:32
你是不是瞎 ? 看清楚 他最初没说用什么语言 我用E语言写也不能怪我 知道不?

⑹ 分治算法的一个小问题,求一个数组的最大最小值,算法如图,怎么实现求指教

//求一个数组A[i...j]的最大值和最小值,分支算法,递归实现
//2015.2.9
//devc++
#include<stdio.h>
#include<malloc.h>

intmin(inta,intb){
returna<b?a:b;
}
intmax(inta,intb){
returna>b?a:b;
}
int*MaxMin(inta[],inti,intj)
{
int*m=(int*)malloc(2*sizeof(int));
if(j-i+1==1){
m[0]=m[1]=a[i];
returnm;
}
if(j-i+1==2){
if(a[i]<a[j]){
m[0]=a[i];
m[1]=a[j];
}
else{
m[0]=a[j];
m[1]=a[i];
}
returnm;
}
intk=(j-i+1)/2;
int*m1=MaxMin(a,i,k);
int*m2=MaxMin(a,k+1,j);
m[0]=min(m1[0],m2[0]);
m[1]=max(m1[1],m2[1]);
returnm;
}
intmain()
{
inta[128];
intn;
inti;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
int*m=MaxMin(a,0,n-1);
printf("%d%d ",m[0],m[1]);
}
return0;
}

⑺ 寻找一个数组中的最大和最小数

寻找一个数组中的最大和最小数
工作一段快两年了,感觉之前学的数据结构和算法基本忘得差不多了,最近一段时间准备复习一下相关知识。
有一个求数组中最大和最小数的题目,基本的思路是遍历一遍数组,然后每个一个元素都和最大值和最小值比较,时间复杂度是2(N-1)或2N。
比较简单的一种减少复杂度的方法是把数组的元素两两分组比较,然后较大的数和max比较,较小的数和min比较,这种实现方法的时间复杂度是1.5N。
还有一种是采用分治法,比较次数也是1.5N,思路是将数组一分为二,分别获取两个子数组的最大和最小值,然后进行取两个子数组中较小的最小值和较大的最大值。
O(N) = (N/2 + N/4 + … + N/2^(log2(N))) = 3N/2 ?
#include <cstdio>

void max_min(int a[], int begin, int end, int *max, int *min) {
if (end == begin) {
*max = a[begin];
*min = a[end];

return;
}
int l_max, r_max;
int l_min, r_min;
max_min(a, begin, begin + (end - begin) / 2, &l_max, &l_min);
max_min(a, begin + (end - begin) / 2 + 1, end, &r_max, &r_min);
*max = l_max > r_max ? l_max : r_max;
*min = l_min < r_min ? l_min : r_min;
}

int main() {
int array[] = {5,7,8,9,11,13,45,8,9,23,45,97,3,2,7,14,64};
int len = sizeof(array) / sizeof(int);
int max = array[0];
int min = array[0];
for (int i = 1; i < len; ++i) {
if (array[i] > max) {
max = array[i];
} else if (array[i] < min){
min = array[i];
}
}
printf("max:%d min:%d", max, min);
int start = -1;
if (len & 0x1) {
start = 1;
} else {
start = 0;
}
for (int i = start; i < len; i+=2) {
if (array[i] > array[i + 1]) {
if (array[i] > max) max = array[i];
if (array[i + 1] < min) min = array[i + 1];
} else if (array[i] < array[i + 1]) {
if (array[i] < min) min = array[i];
if (array[i + 1] > max) max = array[i + 1];
}
}
printf("max:%d min:%d", max, min);

max_min(array, 0, len - 1, &max, &min);
printf("max:%d min:%d", max, min);

return 0;
}

⑻ 最大值和最小值的最优算法

这是不可能的,考虑a,b,c三个元素
要找出最大值,必须比较两次,在此基础上再比较一次才能找出最小值,而3*3/2-2=2.5
也可以用递归思想分析,每增加一个数,都必须和原数组的最大值和最小值比较,比较次数增加2,所以比较次数为2n加一个常数

热点内容
linux文件最后一行 发布:2024-11-15 10:44:11 浏览:612
怎么根据序列号查配置 发布:2024-11-15 10:31:52 浏览:348
mysql查看数据库位置 发布:2024-11-15 10:25:16 浏览:439
需要学Python 发布:2024-11-15 10:23:41 浏览:836
如何制作安卓平板软件 发布:2024-11-15 10:23:39 浏览:215
手机忘记密码被锁预示着什么 发布:2024-11-15 10:22:15 浏览:193
android图片管理 发布:2024-11-15 10:13:02 浏览:9
算法微调 发布:2024-11-15 10:07:44 浏览:542
python列表查询 发布:2024-11-15 10:06:08 浏览:133
保存在服务器的图片如何删除 发布:2024-11-15 09:55:09 浏览:801