zoukankan      html  css  js  c++  java
  • 求中位数

    输入两个未知长度的从小到大排列的数组,求出其中位数:

    思路:
    1.首先将两组数据按照从小到大排列,拿他们的首元素进行对比,总是选取最小的放在新数组中,直到有一个数组遍历完毕,就把另一个数组里剩下的元素放入新元素的尾部。
    2.然后分数组是奇书还是偶数,是奇数,就直接找到中间的数输出;如果是偶数就取[总长度/2]+1

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    
    
        int n=0,m=0,i,j,h; //n记录数组a的长度 m记录数组b的长度
        int a[10086],b[10086],c[10086];
        char ch=0;
    	while (ch != '
    '){
    	scanf("%d",&a[n]);
    	ch = getchar();
    	n++;
    	}
    	ch=0;
    	while (ch != '
    '){ 
    	scanf("%d",&b[m]);
    	ch = getchar();
    	m++;
    	}
    
    
    //插入排序
       int len = n+m;
        i = 0;
    	j = 0;
    	h = 0;
    	while(i<n && j<m){
    		if(a[i]<=b[j]){ //找到最小的放到c数组中
    		c[h++] = a[i++];
    		}else{
    		c[h++] = b[j++];
    		}
    	}
    	   if(i!=n && i==m){ //如果a数组又剩下的,将剩下的数组放到C数组中
    		   for(;i<n;i++){
    			 c[h++] = a[i];
    		   }
    	   }
    
    	   if(i!=m && i==n){ //如果a数组又剩下的,将剩下的数组放到C数组中
    		  for(;i<m;i++){
    			 c[h++] = b[i];
    		   }
    	   }
    
    	   if((n+m)%2!=0) //如果是偶数
            printf("%d
    ",c[(n+m)/2]);
    	   else //如果是奇数
    		printf("%d
    ",(c[(n+m)/2]+c[(n+m)/2-1])/2);
    
    return 0;
    
    }
    
    
    
    
  • 相关阅读:
    linux 杂类
    set
    C++ 基础 杂类
    linux 添加samba账户
    git 常用命令
    git 设置bitbucket 邮箱、用户
    C++ shared_ptr
    git 免密码配置
    2014的新目标
    为/Date(1332919782070)/转时间2013-09-23
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781608.html
Copyright © 2011-2022 走看看