问题描述
给定一个数组,找出其中出现次数最多的那个元素(即众数)。
例如:
1 2 2 2 3 5
众数是: 2
算法思路:先排序 后用分治法计算求解
分治法求解代码如下:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
/*----------快速排序*/
int Partition(int *a , int l , int r)
{
int i = l , j = r+1;
int x = a[l];
while(true){
while(a[++i] < x && i < r);
while(a[--j] > x);
if(i >= j) break;
swap(a[i] , a[j]);
}
a[l] = a[j];
a[j] = x;
return j;
}
/*------------随机选择中位数排序*/
int RandomizedPartitiom(int *a , int l , int r)
{
srand(time(NULL));
int i = rand()%(r-l)+l;
swap(a[i] , a[l]);
return Parti