求乙個無序陣列的中位數
中位數是將陣列排序之後,陣列個數為奇數時,取中間的即為中位數;陣列個數為偶數時,取中間兩個的平均值即為中位數。
思路一:
要取得中位數,即給陣列排序,使用任意排序演算法均可,然後按陣列下標取其中位數。
ps:該方法很直觀,此處不實現
思路二:
1.設陣列元素為n個,且為奇數個時,取陣列前(n+1)/2個元素建乙個小堆
2.遍歷陣列剩餘元素,如果比堆頂元素大即入堆,如果比堆頂元素小或等於堆頂元素,即捨棄,不入堆
3.遍歷完陣列元素時,堆頂即為中位數
ps:此處要使用stl中的優先順序佇列,博主需要見縫插針的介紹一下優先順序佇列
優先順序佇列:
優先佇列不遵循佇列先進先出的規則,而是根據佇列中元素的優先權,優先權最大的先被取出。
優先順序佇列使用方法:
標頭檔案:#include
宣告方式:
1.普通宣告:
priority_queuetty;
這個是使用stl裡預設的排列順序,即從大到小排列,建大堆
2.自定義優先順序:
struct compare
};
**實現:
#include #include #include #include #include using namespace std;
struct compare
};void heapsort(int* arr, int len)
//此時陣列中一半+1的元素已經建成小堆,需要比較陣列後面元素
求乙個無序陣列的中位數
思路一 利用堆排序的思路 將前n 2的元素放進乙個大堆裡,然後將後續的元素與堆頂比較,如果比堆頂大,則繼續比下乙個,如果比堆頂小,則與堆頂的值進行交換。這樣操作完後,堆裡的元素都是比堆頂小的,不再堆裡的元素都比堆頂大,則堆頂就是中位數。void findmid int a,int size 中位數是...
無序陣列求中位數
長度為 n 的無序陣列,求中位數,如何盡快的估算出中位數,演算法複雜度是多少?如果陣列中元素有奇數個,可以採用這種演算法 步驟 1 可以將陣列的前 n 1 2 個元素,建立 1 個最小堆 步驟 2 遍歷剩餘元素,如果剩餘元素小於堆頂元素,則丟棄或不作處理 如果剩餘元素大於堆頂元素,則將其取代堆頂元素...
求乙個無序陣列的中位數(Python)
最簡單的方法是先將陣列排序,然後找中位數。但此種方法肯定不是最優的。乙個比較好的做法是利用小頂堆。思路如下 1.取前len nums 2個元素建立小頂堆。可以知道堆頂元素是前len nums 2個元素中最小的。2.從第len nums 2 1個元素開始,依次將其與堆頂元素比較。若比對頂元素大,則替換...