如何用C语言实现找中间数的功能?

Python017

如何用C语言实现找中间数的功能?,第1张

一楼的那种先使用冒泡法排序再取中间值是一种方法,直接找到中间值也是一种方法,程序如下:

#include<stdio.h>

main()

{

int a,b,c

printf("输入三个数:")

scanf("%d%d%d",&a,&b,&c)

if(a>b&&a<c||a<b&&a>c)

printf("中间数是%d\n",a)

else if(b>a&&b<c||b<a&&b>c)

printf("中间数是%d\n",b)

else if(c>a&&c<b||c<a&&c>b)

printf("中间数是%d\n",c)

}

1.可以先排序后抽出中间那个

2.if

if(a>=b&&a<=c||a<=b&&a>=c)则a

if(b>=a&&b<=c||b<=a&&b>=c)则c

if(c>=a&&c<=b||c<=a&&c>=b)则b

只输入三个数的话很简单,只需要对三个数排序一下,起泡就可以。

如果输入的数很多的话,比如求100W个数据第1W大的是哪个

可以用二叉堆,取100W中的物理位置前1W的数建立二叉堆,以后的99W数据都和堆中第1W个比较,如果大,就做一次替换(这个时候要注意保持堆的特性)。最后堆中最后一个数字就是结果。

#include<stdio.h>

#define N 1001

void bubblesort(int *list,int len) //冒泡排序

{

    int i,j

int temp

    for(i=0i<len - 1i++)

        for(j=0j<len-i - 1j++) 

        {

            if(list[j+1]<list[j])

            {

                temp=list[j+1]

                list[j+1]=list[j]

                list[j]=temp

            }

        }

}

int main(){

int num

int tar[N]

scanf("%d", &num)

while(num != 0){

for(int i = 0 i< num i++){

scanf("%d", &tar[i])

}

bubblesort(tar, num)

if(num % 2 == 0){

printf("%lg\n",(tar[num/2] + tar[num/2 - 1]) / 2.0) 

}else{

printf("%lg\n", tar[num/2]*1.0)

}

scanf("%d",&num)

}

return 0

}