采用顺序比较算法,从前往后顺序比较n个元素,比较时用max保留到当前为止最大的元素。
伪代码如下:
输入:n个数的数组L
输出:max,k
该算法以元素之间的比较作为基本运算,第2行循环n-1次,因此此算法的时间复杂度为W(n)=n-1.
如果求选最小的数Findmin(),只需将上述算法的比较条件稍加改动即可。
求最大值Findmax()函数C语言程序如下:
void Findmax(int L[10]){
int max,k,i;
max = L[0];
for (i = 0; i < 10; i++){
if (max < L[i]){
max = L[i];
k = i;
}
}
printf("最大值为%d\n", max);
printf("最大数为第%d个数\n", k+1);
}
完整代码为:
//算法2.7 Findmax
//输入n个数的数组L
//max k
#include<stdio.h>
#include<stdlib.h>
void Findmax(int L[10]){
int max,k,i;
max = L[0];
for (i = 0; i < 10; i++){
if (max < L[i]){
max = L[i];
k = i;
}
}
printf("最大值为%d\n", max);
printf("最大数为第%d个数\n", k+1);
}
void show(int array[], int len)
{
int i;
for(i = 0; i < len; i++)
{
printf("%-3d", array[i]);
}
printf("\n");
return ;
}
int main(){
int L[10] = { 1,5,3,7,2,4,9,8,0,6 };
int i;
show(L,10);
Findmax(L);
return 0;
}
运行结果为: