尋找無序陣列的中位數

2021-08-05 19:23:59 字數 1327 閱讀 3710

題目:求乙個無序陣列的中位數。

如:的中位數為5,的中位數為4和5。

void findmidnum1(int *arr, int size)

for (int j = (size + 1) / 2 + 1; j < size; j++)

}if (size & 1)//奇數個元素

cout

<< "中位數: "

<< _pq.top() << endl;

else

}

1.將陣列元素平均分配到大小堆中,保證小堆的元素都比大堆的元素大,那麼中位數一定在某堆的堆頂

a.將下標為奇數的元素放到小堆

b.將下標為偶數的元素放到大堆

c.交換堆頂元素保證小堆的元素都比大堆的大

template

struct greater

};void findmidthnum(int *array,int size)

priority_queue,greater >min_pq;

priority_queuemax_pq;

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

}if (size & 1)

cout

<< max_pq.top() << endl;

else

cout

<< max_pq.top() << " "

<< min_pq.top() << endl;

}

採用快排思想

快排思想:

任意選取乙個元素將需要排序的集合劃分為2個部分,比元素小的在左部分,比元素大的在右部分

如果選取的元素剛好是中位數那麼左右部分的元素個數剛好是(size-1)/2

如果小於(size-1)/2那麼中位數在右側,大於(size-1)/2中位數在左半部分

int partion(int *arr, int left, int right, int length)

if (++ppre != right)

swap(arr[ppre], arr[right]);

return ppre;

}void getmidthnum(int *arr,int size)

else

if (div

< mid)//右部分的元素多,中位數在右側

else

//找到中位數

break;

}cout << "中位數 : "

<< arr[div] << endl;

}

無序陣列的中位數

題目 求出乙個無需陣列的中位數。例 的中位數為5,的中位數為4和5。要求 不能使用排序。思路1 將資料平均分配到最大堆和最小堆中,並且保證最小堆中的資料存放的資料都比最大堆中是資料大,那麼此時最小堆堆頂的元素一定是中位數。那麼如何保證最小堆中的元素,都比大堆中的元素大 1 遍歷陣列,將第i個數插入堆...

無序陣列的中位數

參考 中位數,就是陣列排序後處於陣列最中間的那個元素。說來有些麻煩,如果陣列長度是奇數,最中間就是位置為 n 1 2的那個元素。如果是偶數呢,標準的定義是位置為n 2和位置為n 2 1的兩個元素的和除以2的結果,有些複雜。為了解答的方便,我們假設陣列長度暫且都為奇數吧。面試時,大家是不是經常被問到,...

無序陣列的中位數

不能使用排序演算法,而且要求時間複雜度o n coding utf 8 time 2019 4 22 10 42 am author george file main7.py contact georgewang1994 163.com defheapify seq,start,end 找出從sta...