Posted on 2008-03-29 23:03
痛哭的小强 阅读(154)
评论(0) 编辑 收藏
用递归法(尾递归)求最多元素,即找出出现次数大于n/2的元素
基于原理:去掉两个不同的元素,剩下数组里的最多元素仍然是整个数组的最多元素(如果存在的话)
1 #include <stdio.h>
2 int majority(int [], int,int );
3
4 int main()
5 {
6 int i = 0;
7 int c = 0;
8 int data [] = {3,5,5,2,2,2,2};
9 int maj = majority(data,1 ,7);
10 for( ; i < 7; i++)
11 {
12 if(maj == data[i])
13 c++;
14 }
15 printf("The majority num of this array is: %d\n", c>3?maj:-1);
16 return 0;
17 }
18 /*s for the begining index, and e for the ending index
19 * * find the cadidate num of majority*/
20 int majority(int data[], int s, int e)//begin s = 1, e = n(including)
21 {
22 int c = 1;// count the candidate majority num
23 int j; //fot the index move on
24 int i = 0;
25 for( j = s; j< e; j++)
26 {
27 if( data[s-1] == data[j])
28 c++;
29 else
30 {
31 if(--c==0)
32 break;
33 }
34 }
35 if(c>0)
36 return data[s-1];
37 else
38 majority(data, j+1, e);
39
40 }