//寻找众数问题
#include <iostream>
using namespace std;
#define N 10
void swap(int &p,int &q)
{
int t;
t=p;
p=q;
q=t;
}
int partition(int a[],int low,int high)
{
int i,j,temp;
i=low;j=high;
temp=a[i];
do
{
while((a[j]>temp) && (i<j))
j--;
if(i<j)
swap(a[i++],a[j]);
while((a[i]<=temp) && (i<j))
i++;
if(i<j)
swap(a[j--],a[i]);
}while(i!=j);
a[i]=temp;
return i;
}
void sort(int a[],int low,int high)//快速排序
{
if(low < high)
{
int k = partition(a,low,high);
sort(a,low,k-1);
sort(a,k+1,high);
}
return;
}
int search(int a[],int n)//寻找众数
{
sort(a,0,n-1);
int max = a[0];
int temp = max;
int count = 1;
int current_count = 1;
for(int i = 1; i < n; i++)
{
if(a[i] == max)
{
count++;continue;
}
else
{
max = a[i];
if(count > current_count)
{
temp = a[i-1];
current_count = count;
}
}
}
return temp;
}
int main()
{
int a[N]= {1,2,2,4,3,5,8,2,7,2};
int result = search(a,N);
cout << result<< endl;
return 0;
}
这个时间代价比较大,不知道还有什么好的算法,我还在思考,以后补充。