數組最小演算法
⑴ 輸入十個數,輸出最大數,最小數,用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加一個常數