你這個(gè)應(yīng)該是面試題吧,平時(shí)不會(huì)讓你做這樣的問(wèn)題
成都創(chuàng)新互聯(lián)公司秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營(yíng)銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,小程序制作,網(wǎng)頁(yè)設(shè)計(jì)制作,手機(jī)網(wǎng)站開(kāi)發(fā),成都全網(wǎng)營(yíng)銷幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長(zhǎng)。
首先要了解一下什么是中位數(shù),中位數(shù)就是數(shù)列中間的那個(gè)數(shù),
如果一個(gè)集合是奇數(shù)個(gè),那么中位數(shù)就是按大小排列后,最中間那個(gè)數(shù),
如果一個(gè)集合是偶數(shù)個(gè),那么中位數(shù)就是按大小排列后,最中間那2個(gè)數(shù)的平均數(shù)
那計(jì)算一個(gè)1億個(gè)浮點(diǎn)數(shù)的中位數(shù),說(shuō)白了是要你排序,然后找到中間那兩個(gè)數(shù)字的平均數(shù)
剩下就是排序的算法部分了,無(wú)規(guī)律的隨機(jī)數(shù)字可以考慮快排算法
補(bǔ)充代碼(快排)
那就用快排好了
package quickSort;
public class QuickSort {
private static int count;
/**
* 測(cè)試
* @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ù)組個(gè)數(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ù)組只有一個(gè)元素,直接返回
if(left=right) {
return;
}
//設(shè)置最左邊的元素為基準(zhǔn)值
int key=num[left];
//數(shù)組中比key小的放在左邊,比key大的放在右邊,key值下標(biāo)為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));
}
// 可換為多個(gè)數(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個(gè)隨即兩位正整數(shù),并按由大到小的順序排列,并求中位數(shù)
*?@param?n?生成n個(gè)兩位正整數(shù)
*/
public?static?void?generate(int?n)?{
int[]?nums?=?new?int[n];//?初始化數(shù)組
//?隨機(jī)生成兩位正整數(shù)并對(duì)數(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之間的隨機(jī)數(shù),
Math.random()返回的是0到1之間的隨機(jī)數(shù),返回類型為double型,大于等于0,小于1,
引用JDK1.6api
public static double random()返回帶正號(hào)的 double 值,該值大于等于 0.0 且小于 1.0。返回值是一個(gè)偽隨機(jī)選擇的數(shù),在該范圍內(nèi)(近似)均勻分布。
Math.random()*900,就是0到900之間的數(shù)了,可以取到0,但是取不到900,但是這個(gè)乘積是double類型的,將它強(qiáng)制轉(zhuǎn)換成int類型,然后加上100,就變成了可以取到100,但是取不到1000.完畢