实现思路
第一步
将无序数组排序
第二步
排好序的数组找出连续相等最多的那个数字
比如:已排好序的数组如{1,3,3,3,3,7,9,23}
就找出连续相等次数最多的数字3
#include <stdio.h>
/*交换两个整数的值*/
void swap(int *p, int *q)
{
int buf;
buf = *p;
*p = *q;
*q = buf;
return;
}
/*快速排序*/
void quick_sort(int *a, int low, int high)
{
int i = low;
int j = high;
int key = a[low];
if (low >= high) //如果low >= high说明排序结束了
{
return ;
}
while (low < high) //该while循环结束一次表示比较了一轮
{
while (low < high && key <= a[high])
{
--high; //向前寻找
}
if (key > a[high])
{
swap(&a[low], &a[high]);
++low;
}
while (low < high && key >= a[low])
{
++low; //向后寻找
}
if (key < a[low])
{
swap(&a[low], &a[high]);
--high;
}
}
quick_sort(a, i, low-1); //用同样的方式对分出来的左边的部分进行同上的做法
quick_sort(a, low+1, j); //用同样的方式对分出来的右边的部分进行同上的做法
}
/*查找一个有序数组中的众数*/
int find_mode_number(int *arr,int len)
{
int many = 1,less = 1;
int value = 0;
for(int i = 0;i < len;i++){
for(int j = i;j < len;j++)
{
if(arr[j] == arr[j+1]){
less++;
} else {
if(many < less){
swap(&many,&less);
value = arr[j];
}
less = 1;
break;
}
}
}
return value;
}
/*主函数*/
int main()
{
int arr[] = {3,1,5,5,5,6,77,77,77,77,77,9,9,9,9,9,9,9,9};
quick_sort(arr, 0, sizeof(arr)/sizeof(int)-1);//排序
int count = find_mode_number(arr, sizeof(arr)/sizeof(int));//查找众数
printf("%d\n",count);
return 0;
}