你這個應該是面試題吧,平時不會讓你做這樣的問題
成都創(chuàng)新互聯(lián)公司秉承實現(xiàn)全網(wǎng)價值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計制作、成都做網(wǎng)站,小程序制作,網(wǎng)頁設(shè)計制作,手機網(wǎng)站開發(fā),成都全網(wǎng)營銷幫助傳統(tǒng)企業(yè)實現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻自己的專業(yè)和所長。
首先要了解一下什么是中位數(shù),中位數(shù)就是數(shù)列中間的那個數(shù),
如果一個集合是奇數(shù)個,那么中位數(shù)就是按大小排列后,最中間那個數(shù),
如果一個集合是偶數(shù)個,那么中位數(shù)就是按大小排列后,最中間那2個數(shù)的平均數(shù)
那計算一個1億個浮點數(shù)的中位數(shù),說白了是要你排序,然后找到中間那兩個數(shù)字的平均數(shù)
剩下就是排序的算法部分了,無規(guī)律的隨機數(shù)字可以考慮快排算法
補充代碼(快排)
那就用快排好了
package quickSort;
public class QuickSort {
private static int count;
/**
* 測試
* @param args
*/
public static void main(String[] args) {
int[] num = {3,45,78,64,52,11,64,55,99,11,18};
System.out.println(arrayToString(num,"未排序"));
QuickSort(num,0,num.length-1);
System.out.println(arrayToString(num,"排序"));
System.out.println("數(shù)組個數(shù):"+num.length);
System.out.println("循環(huán)次數(shù):"+count);
}
/**
* 快速排序
* @param num 排序的數(shù)組
* @param left 數(shù)組的前針
* @param right 數(shù)組后針
*/
private static void QuickSort(int[] num, int left, int right) {
//如果left等于right,即數(shù)組只有一個元素,直接返回
if(left=right) {
return;
}
//設(shè)置最左邊的元素為基準值
int key=num[left];
//數(shù)組中比key小的放在左邊,比key大的放在右邊,key值下標為i
int i=left;
int j=right;
while(ij){
//j向左移,直到遇到比key小的值
while(num[j]=key ij){
j--;
}
//i向右移,直到遇到比key大的值
while(num[i]=key ij){
i++;
}
//i和j指向的元素交換
if(ij){
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
num[left]=num[i];
num[i]=key;
count++;
QuickSort(num,left,i-1);
QuickSort(num,i+1,right);
}
private static String arrayToString(int[] arr,String flag) {
String str = "數(shù)組為("+flag+"):";
for(int a : arr) {
str += a + "\t";
}return str;}}
package com.test;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
System.out.println(zhongweishu(7, 4, 8));
}
// 可換為多個數(shù),如參數(shù)為:int a,int b,int c,int d,int e
public static int zhongweishu(int a, int b, int c){
int[] nums = {a,b,c};
Arrays.sort(nums); // 數(shù)組從小到大排序
return nums[nums.length/2]; // 找出排序后中間的數(shù)組值
}
}
import?java.util.Random;
public?class?GenerateNumber?{
public?static?void?main(String[]?args)?{
generate(31);
generate(22);
}
/**
*?隨即產(chǎn)生N個隨即兩位正整數(shù),并按由大到小的順序排列,并求中位數(shù)
*?@param?n?生成n個兩位正整數(shù)
*/
public?static?void?generate(int?n)?{
int[]?nums?=?new?int[n];//?初始化數(shù)組
//?隨機生成兩位正整數(shù)并對數(shù)組賦值
for?(int?i?=?0;?i??nums.length;?i++)?{
nums[i]?=?new?Random().nextInt(90)?+?10;
}
//?輸出排序前結(jié)果
System.out.print("排序前:");
for?(int?i?:?nums)?{
System.out.print(i?+?"?");
}
//?降序排列
for?(int?i?=?0;?i??nums.length;?i++)?{
for?(int?j?=?0;?j??i;?j++)?{
if?(nums[j]??nums[i])?{
int?temp?=?nums[i];
nums[i]?=?nums[j];
nums[j]?=?temp;
}
}
}
//?輸出排序后結(jié)果
System.out.print("\n排序后:");
for?(int?i?:?nums)?{
System.out.print(i?+?"?");
}
//?輸出中位數(shù)
if?(n?%?2?==?0)?{
System.out.println("\n中位數(shù):"?+?nums[n?/?2?-?1]?+?"?"?+?nums[n?/?2]);
}?else?{
System.out.println("\n中位數(shù):"?+?nums[n?/?2]);
}
}
}
排序前:81?27?43?59?96?47?62?36?17?15?62?59?36?50?77?25?15?58?98?80?22?11?98?85?19?29?96?13?39?79?33?
排序后:98?98?96?96?85?81?80?79?77?62?62?59?59?58?50?47?43?39?36?36?33?29?27?25?22?19?17?15?15?13?11?
中位數(shù):47
排序前:14?86?18?76?13?40?92?26?58?52?24?57?81?40?53?67?23?73?63?52?36?19?
排序后:92?86?81?76?73?67?63?58?57?53?52?52?40?40?36?26?24?23?19?18?14?13?
中位數(shù):52?52
public class Test2
{
public static void main(String [] srgs)
{
int i=(int)(Math.random()*900)+100;
//int i= new java.util.Random().nextInt(900)+100;也可以
System.out.println(i);
}
}
也就是要求100到999之間的隨機數(shù),
Math.random()返回的是0到1之間的隨機數(shù),返回類型為double型,大于等于0,小于1,
引用JDK1.6api
public static double random()返回帶正號的 double 值,該值大于等于 0.0 且小于 1.0。返回值是一個偽隨機選擇的數(shù),在該范圍內(nèi)(近似)均勻分布。
Math.random()*900,就是0到900之間的數(shù)了,可以取到0,但是取不到900,但是這個乘積是double類型的,將它強制轉(zhuǎn)換成int類型,然后加上100,就變成了可以取到100,但是取不到1000.完畢
新聞名稱:java中求中位數(shù)代碼,java輸入數(shù)組求中位數(shù)
標題鏈接:http://chinadenli.net/article46/heeheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務、定制開發(fā)、手機網(wǎng)站建設(shè)、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、自適應網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)