尋找數列中的主元素

2021-08-28 05:09:45 字數 974 閱讀 6450

#尋找數列中的主元素

已知乙個整數序列,若乙個元素個數m大於元素總個數n的一半,稱為主元素。

方法一:線性法

分兩步走:1.選取候選的主元素:依次掃瞄所給陣列中的每個整數,將遇到的第乙個數n儲存在c中,記n出現次數為1,然後接著往後掃瞄,若下個數仍然是n,則次數加一,否則減一,當計數為0時,將遇到的下乙個整數儲存到c中,計數為1,重新開始新一輪計數。

2。重新掃瞄,統計c出現的次數是否大於n/2;

這個方法一開始不怎麼理解,後來一推發現只要有主元素,那麼到最後c一定存的是主元素,因為個數大於n/2。

方法二:中位數法

這裡我們利用求中位數的方法,若乙個序列有主元素,那麼我們先將序列排序,那麼有序序列的主元素必定是中位數,所以我們先求出序列的中位數,然後再檢查其個數是否大於n/2,從而確定序列是否含有主元素,這裡排序我們選擇快速排序的方法,**如下:

主元素法**:

int majority(seqlist *l)}}

if(count>0)

}

方法二:中位數法,**如下

#include#include#define initsize 100

typedef int datatype;

typedef structseqlist;

void init(seqlist *l)

void creat(seqlist *l,int n)

l->n=n;

}int partition(seqlist *l,int low,int high)

l->data[low]=pivot;

return low;

}void quicksort(seqlist *l,int low,int high)

else

printf("無主元素!");

system("pause");

}

尋找主元素

如果乙個陣列a 1.n 中超過半數的元素都相同時,該陣列被稱為含有主元素。演算法思想 利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o n 演算法,我們知道,排序的最優時間複雜度是o nlogn 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...

尋找陣列中的主要元素

對於乙個大小為n的整數陣列,將其中出現次數大於n 2的元素稱為主要元素,例如中主要元素是5,而中則沒有。似乎是乙個統計陣列元素出現次數的問題,因此尋找出現次數最多的元素的解法在這裡也適用。不過該問題有乙個特點 即要求元素出現次數過半。因此,如果存在這樣的主要元素x,將它與陣列所有元素進行比較,相等則...

c 學習筆記(36) 利用快排尋找主元素

如果乙個陣列a 1.n 中超過半數的元素都相同時,該陣列被稱為含有主元素。演算法思想 利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o n 演算法,我們知道,排序的最優時間複雜度是o nlogn 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...