题目描述:王道P19 Q12
主元素:一个数组中某个元素个数为k个,数组长度为n,如果k>n/2,那这个数就是主元素。
思想:
先把整个数组按递增排序,主元素一定在中间位置,找出n/2位置的那个数,如果那个数是主元素,那么就是,否则就不是。
代码:
int getMajority(int A[],int n){
bubbleSort(A,n);
int median=A[n/2];
int count=0;//记录中位数个数
for(int i=0;i<n;i++){
if(A[i]==median)
count++;
}
if(count>n/2)
return median;//中位数就是主元素
else
return -1;
}
void bubbleSort(int A[],int n){
int flag;
for(int i=n-1;i>=1;i--){
flag=0;
for(int j=1;j<=i;j++){
if(A[j-1]>A[j]){
swap(A[j-1],A[j]);
flag=1;
}
}
if(flag==0)
return;
}
}
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数.