int min(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
if(a[i]<a[i+1])
{
int temp;
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
return a[n-1];
}
int main(void)
{
int mi,a[100];
printf("请输入整数的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("\n请输入a[%d] : ",i);
scanf("%d",&a[i]);
}
mi = min(a,n);
printf("此数组中最小的数为 %d\n",mi);
return 0;
}
希望我的回答对你有所帮助
方法1:
public class Main{
public static void main (String args[ ]) {
int a1[ ]=new int[] {5,3,6,8,10,56};
Arrayssort(a1);
Systemoutprintln("最大值:"+a1[a1length-1]);
Systemoutprintln("最小值:"+a1[0]);
}
}
方法2:
public static void main(String args[]) {
int a[]={84,40,16,3,10,49,28,76,94,70};
int n;
int min=a[0];
int i;
int max=a[0];
for(n=0;n<=9;n++) {
if(max<a[n])
max=a[n];
}
for(i=0;i<=9;i++) {
if(min>a)
min=a;
}
Systemoutprint("max="+max);
Systemoutprint("min="+min);
}
}实现思路就是循环判断找到最大值和最小值,保存起来和其他的值进行比较。代码如下:
public class TestJava4_3
{
public static void main(String args[])
{
int i,min,max;
int A[]={74,48,30,17,62}; // 声明整数数组A,并赋初值
min=max=A[0];
Systemoutprint("数组A的元素包括:");
int j =0;
int n =0 ;
for(i=0;i<Alength;i++)
{
Systemoutprint(A[i]+" ");
if(A[i]>max) // 判断最大值
j =i;
max=A[i];
if(A[i]<min) // 判断最小值
min=A[i];
n =i
}
Systemoutprintln("\n数组的最大值是:"+max+"数组的位置是:"+(j+1)); // 输出最大值和最大值的位置
Systemoutprintln("数组的最小值是:"+min+"数组的位置是:"+(n+1)); // 输出最小值
}
}public int min(int[] a){
int b=a[0];
for(int i=1;i<alength;i++){
if(a[i]<b){
b=a[i];
}
}
return b;
}寻找一个数组中的最大和最小数
工作一段快两年了,感觉之前学的数据结构和算法基本忘得差不多了,最近一段时间准备复习一下相关知识。
有一个求数组中最大和最小数的题目,基本的思路是遍历一遍数组,然后每个一个元素都和最大值和最小值比较,时间复杂度是2(N-1)或2N。
比较简单的一种减少复杂度的方法是把数组的元素两两分组比较,然后较大的数和max比较,较小的数和min比较,这种实现方法的时间复杂度是15N。
还有一种是采用分治法,比较次数也是15N,思路是将数组一分为二,分别获取两个子数组的最大和最小值,然后进行取两个子数组中较小的最小值和较大的最大值。
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;
}
可以先排序再输出最小的两个数
也可以采用下面的方法,不用排序直接给出最小的两个数
思路:数组中数和两个数依序比较,比这两个中的一个小,则与其交换
void getmin(int array[],int arraylen,int out[],int outlen){//outlen应该为2
int i,j;
for(i=0;i<outlen;i++)out[i] = 0x7FFFFFFF;//这是一个最大整数值
for(i=0;i<arraylen;i++){//遍历数组
for(j=0;j<outlen;j++){//遍历最小数列表
if(array[i]<out[j]){//array中的数更小
out[j] = array[i];//记录该数
break;
}
//如果out中的数小,则看看下一个out数会不会比这个大
}
}
}
这个方法可以适用于查找一维数组中最小的n个数
#include<stdioh>
int main()
{
int a[11],min=0,t;
for(int i=0;i<10;i++)
scanf("%d",&a[i]);
min=a[0];
for(int i=0;i<10;i++)
if(a[i]<min)//求最小值
min=a[i];
for(int i=0;i<10;i++)//冒泡排序
for(int j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(int i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n%d",min);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)