#尋找數列中的主元素
已知乙個整數序列,若乙個元素個數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 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...