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

}

呵呵。这是一个很经典的算法。你百度一下找第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算法导论书上专门有讨论的。好像是……&

C++实现输入多个整数(以0结束),统计出其中最大数和第二大数,参考代码如下:

#include<iostream> 

using namespace std

int main()

{

int t,max1=0,max2=0,flag=0

while(1){

cin>>t

if(t==0) break

if(flag==0){

max1=max2=t

flag=1

}else if(flag==1){

if(t>max1)

max1=t

else

max2=t

flag=2

}else{

if(t>max1){

max2=max1

max1=t

}else if(t>max2)

max2=t

}

}

cout<<"max1 = "<<max1<<" max2 = "<<max2<<endl

return 0

}


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

原文地址: https://outofmemory.cn/sjk/6422906.html

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

发表评论

登录后才能评论

评论列表(0条)

保存