已知一组数据,编程实现找到其中的最大值。有很多的方法可以解决这个问题。如冒泡法。还有一种好一点的算法,在这组数据中挑出一部分数据按照升序的排列,如存储在数量为K的数组中。然后再把其他剩下的数据和已经排列好的数据的最大值相比较。如果比最大值大下,则舍弃。反之则把该数存入到数组,将数组中的最小数抛弃。循环到最后,数量为K的数组中的最后一个数据就是这组数据中的最大的那个。
1.冒泡法
/************************************************************************
* File Name :slp1.c (slection problem)
* Copyright :scut,All Rights Reserved.
* Create Data :2012/11/18
* Author :lumotuwe
* Abstruct Description :bubble sort
*
************************************************************************/
#include<stdio.h>
#include<string.h>
int main(int argc, char ** argv)
{
int max;
int i,j,len,num[100];
for(i=0;i<=99;i++) num[i]=0;
if(argc < 2)
printf("input erro\n please input like that "slp 6 13 56 6 123!"\n");
/*
Converting string to int;
*/
for(i=1 ; i<=argc-1 ;i++)
{
len = strlen(argv[i]);
for(j=0; j<len; )
{
num[i-1]+=(int)(argv[i][j]-48);
if(j<len-1)num[i-1]*=10;
j++;
}
}
max = num[0];
for(i=1 ; i<=argc-2; i++)
{
if(max<=num[i])
max = num[i];
}
printf("the largest number is %d\n", max);
return 0;
}
2.好一点的算法
/************************************************************************
* File Name :slp1.c (slection problem)
* Copyright :scut,All Rights Reserved.
* Create Data :2012/11/18
* Author :lumotuwe
* Abstruct Description :new bubble sort
*
************************************************************************/
#include<stdio.h>
#include<string.h>
int main(int argc, char ** argv)
{
int max;
int i,j,len,num[100],snum[50];
for(i=0;i<=99;i++) { num[i]=0;snum[i]=0;}
if(argc < 2)
printf("input error---please input like that "slp 6 13 56 6 123"\n");
for(i=1 ; i<=argc-1 ;i++)
{
len = strlen(argv[i]);
for(j=0; j<len; )
{
num[i-1]+=(int)(argv[i][j]-48);
if(j<len-1)num[i-1]*=10;
j++;
}
}
len=(argc-1)/2;
if(len==0)
{
max=num[0];
}
else
{
for(i=0;i<=len-1;i++)
snum[i]=num[i];
for(j=0;j<=len-2;j++)
{
for(i=0;i<=len-2-j;i++)
if(snum[i]>=snum[i+1])
{
max=snum[i+1];
snum[i+1]=snum[i];
snum[i]=max;
}
}
for(i=len;i<=argc-2;i++)
{ if(num[i]<=snum[len-1]) continue;
else
{for(j=0;j<=len-2;j++)
{
snum[j]=snum[j+1];
}
snum[len-1]=num[i];
}
}
max = snum[len-1];
}
printf("the largest number is %d\n", max);
return 0;
}