題目:求乙個無序陣列的中位數。
如:的中位數為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...