演算法 中位數計算

2021-09-06 10:53:39 字數 1550 閱讀 6653

中位數(median)

1、定義:一組資料按從小到大(或從大到小)的順序依次排列,處在中間位置的乙個數(或最中間兩個資料的平均數,注意:和眾數不同,中位數不一定在這組資料中)。 

注:當個數為基數時,取最中間位置的數;當個數為偶數時,取最中間兩個數的平均數。

2、從小到大排序,可以先用氣泡排序,然後取中位數,那麼先看下氣泡排序演算法,**如下:

public static void bubblesort(this ilistarray)

int count = array.count;

for (int i = 0; i < count - 1; i++)}}

}public static void bubblesort(this ilistarray) where t : icomparable

int count = array.count;

for (int i = 0; i < count - 1; i++)}}

}

一種為基本的演算法,另外一種為泛型的。排序後取中位數即可。

3、但是我們並不需要全部從小到大排序,只需要一部分排序即可(即在冒泡的基礎上改進),先看**:

public static double median(this ilistarray)

return array.toarray().median();

}public static double median(this double array)

int endindex = array.length / 2;

for (int i = 0; i <= endindex; i++)}}

if (array.length % 2 != 0)

return (array[endindex - 1] + array[endindex]) / 2;

}public static decimal median(this ilistarray)

return array.toarray().median();

}public static decimal median(this decimal array)

int endindex = array.length / 2;

for (int i = 0; i <= endindex; i++)}}

if (array.length % 2 != 0)

return (array[endindex - 1] + array[endindex]) / 2;

}

改進的**只有2行

int endindex = array.length / 2;

for (int i = 0; i <= endindex; i++)

計算一半即可。個人還是喜歡用decimal來進行計算,誤差較小,雖然執行速度較其他基礎型別慢一點。

4、操作方式如下:

double array = ;

double result = array.median();

BFPRT(中位數的中位數)演算法

又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...

SQL計算中位數

表還是total sales新增一項 表 sql語句 select from select a1.name,a1.sales,count a2.sales sales rank from total sales a1,total sales a2 where a1.sales a2.sales or...

mysql計算位數 MySQL中位數計算方法

在網上搜到的一種演算法是利用自增長變數進行排序,然後再根據位置序號取。感覺有些複雜了,還是group concat來的省事些 1.按順序聚合,逗號分隔,並計數 group concat number order by number asc 2.根據逗號拆分,判斷奇偶數去擷取中間位置的那個數 具體 如...