求乙個無序陣列的中位數

2021-08-05 21:56:56 字數 948 閱讀 9702

思路一:利用堆排序的思路

將前n/2的元素放進乙個大堆裡,然後將後續的元素與堆頂比較,如果比堆頂大,則繼續比下乙個,如果比堆頂小,則與堆頂的值進行交換。

這樣操作完後,堆裡的元素都是比堆頂小的,不再堆裡的元素都比堆頂大,則堆頂就是中位數。

void findmid(int a,int size)

;//中位數是5

int b = ;//中位數是4和5

int len = sizeof(a)/sizeof(a[0]);

int lenb = sizeof(b)/sizeof(b[0]);

findmid(a,len);

findmid(b,lenb);

}

結果如下:

+

思路二:利用快排的思想

任意挑乙個元素,以改元素為支點,劃分集合為兩部分,如果左側集合長度恰為 (n-1)/2,那麼支點恰為中位數。如果左側長度

這種方法很快,但是在最壞的情況下時間複雜度為o(n^2), 不過平均時間複雜度好像是o(n)。

int qucikfind(int a,int k,int l,int r)

void find1(int a,int size)

;//中位數是5

int b = ;//中位數是4和5

int len = sizeof(a)/sizeof(a[0]);

int lenb = sizeof(b)/sizeof(b[0]);

find1(a,len);

find1(b,lenb);

結果如下:

求乙個無序陣列的中位數

求乙個無序陣列的中位數 中位數是將陣列排序之後,陣列個數為奇數時,取中間的即為中位數 陣列個數為偶數時,取中間兩個的平均值即為中位數。思路一 要取得中位數,即給陣列排序,使用任意排序演算法均可,然後按陣列下標取其中位數。ps 該方法很直觀,此處不實現 思路二 1.設陣列元素為n個,且為奇數個時,取陣...

無序陣列求中位數

長度為 n 的無序陣列,求中位數,如何盡快的估算出中位數,演算法複雜度是多少?如果陣列中元素有奇數個,可以採用這種演算法 步驟 1 可以將陣列的前 n 1 2 個元素,建立 1 個最小堆 步驟 2 遍歷剩餘元素,如果剩餘元素小於堆頂元素,則丟棄或不作處理 如果剩餘元素大於堆頂元素,則將其取代堆頂元素...

求乙個無序陣列的中位數(Python)

最簡單的方法是先將陣列排序,然後找中位數。但此種方法肯定不是最優的。乙個比較好的做法是利用小頂堆。思路如下 1.取前len nums 2個元素建立小頂堆。可以知道堆頂元素是前len nums 2個元素中最小的。2.從第len nums 2 1個元素開始,依次將其與堆頂元素比較。若比對頂元素大,則替換...