如果乙個陣列a[1..n]中超過半數的元素都相同時,該陣列被稱為含有主元素。
演算法思想:
利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o(n)演算法,我們知道,排序的最優時間複雜度是o(nlogn),所以我們需要借助其他的方法來完成這個問題。
我們可以想到快速排序,當我們調整基準元素時,如果基準元素到達n/2,則說明左邊都比它小,右邊都比它大,這個數肯定就是中位數。我們只需要再遍歷一次陣列,看看陣列中和這個中位數相等的數的個數有幾個就可以了。如果大於n/2,則含有主元素,反之沒有。
時間複雜度為o(nlogn + n)
**如下:
#includeusing namespace std;
int n, mid;
int partition(int arr, int low, int high)
return j; //返回基準元素位置
}void quick_sort(int arr, int low, int high)
}int main()
另一種遞迴:
#includeusing namespace std;
int n;
void quicksort(int arr, int low, int high)
arr[i] = pivot;
if(i > n / 2)
quicksort(arr, low, i - 1); //遞迴左邊
else if(i < n / 2)
quicksort(arr, j + 1, high); //遞迴右邊
else
return ;
}int main()
尋找數列中的主元素
尋找數列中的主元素 已知乙個整數序列,若乙個元素個數m大於元素總個數n的一半,稱為主元素。方法一 線性法 分兩步走 1.選取候選的主元素 依次掃瞄所給陣列中的每個整數,將遇到的第乙個數n儲存在c中,記n出現次數為1,然後接著往後掃瞄,若下個數仍然是n,則次數加一,否則減一,當計數為0時,將遇到的下乙...
python尋找多數元素 尋找多數元素
今天實現的演算法是尋找多數元素,多數元素是指在乙個含有n個元素的序列 現次數多於 n 2 向下取整 的元素。蠻力尋找多數元素是對每個元素進行計數,如果某個元素的計數超過 n 2 則斷言它是多數元素,否則不存在多數元素。這種方法的時間複雜度過高,可以尋找更高效能的演算法解決這類問題。如果乙個序列存在多...
c 學習筆記(36) 利用快排尋找主元素
如果乙個陣列a 1.n 中超過半數的元素都相同時,該陣列被稱為含有主元素。演算法思想 利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o n 演算法,我們知道,排序的最優時間複雜度是o nlogn 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...