c语言如何求第二大的数

c语言如何求第二大的数,第1张

#include <stdio.h>

void main()

{

int n,i,max,max2,a[1000]

printf("输入数据,以负数结束:\n")

for(n=01n++)

{

scanf("%d",&a[n])

if(a[n++]<0)break

}

max=max2=a[0]

for(i=1i<ni++)

if(a[i]>max){max2=maxmax=a[i]}

 else if(a[i]>max2)max2=a[i]

printf("第二大的数是 %d\n",max2)

getch()

return 0

}

你真的很好学

void main(void)

{

int n,i,buff[100]

int max=buff[0],second=buff[0]

scanf("%d",&n)

printf("输入的数为:%d",n)

srand(n)//初始化种子

for(i=0i<ni++)

{

buff[i] = ((int)rand()%n)//产生随机数

}

for(i=0i<ni++)//寻找最大的

{

if(buff[i]>max)

{

max = buff[i]

}

}

for(i=0i<ni++)//寻找第二大的

{

if(buff[i] != max)

{

if(buff[i]>second)

{

second= buff[i]

}

}

}

printf("第二大的是:%d",second)

}

呵呵。这是一个很经典的算法。你百度一下找第K小或者第K大的数。去看看。

我分析下思路:

2轮冒泡,可以找出第二大数。

2轮循环。也可以找出第二大的。

你要到公司面试,要讲效率的话。可以看看我写的下面这个代码

这是用快速排序,夹逼原则来锁定要找的第K大的元素

void swape(int *p1,int *p2)

{

int temp

temp=*p1

*p1=*p2

*p2=temp

}

int searchPosition(int a[10],int start,int end)

{

int pivot=a[start]

while(start<end)

{

while(start<end&&a[end]>=pivot)

end--

if(start!=end)

{

swape(&a[start],&a[end])

start++

}

while(start<end&&a[start]<=pivot)

start++

if(start!=end)

{

swape(&a[start],&a[end])

end--

}

}

return start

}

int sloving(int a[10],int m)

{

int part=searchPosition(a,0,9)

while(m!=part+1)

{

if(m<part+1)

part=searchPosition(a,0,part)

else

part=searchPosition(a,part+1,9)

}

return part

}

Dev-C++ 测试通的!

MIT算法导论书上专门有讨论的。好像是……&


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9415300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存