#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <exception>
using namespace std;
void Swap(int &elem1, int &elem2)
{
int temp;
temp = elem1;
elem1 = elem2;
elem2 = temp;
}
void Swap(int *elem1,int *elem2)
{
int temp;
temp = *elem1;
*elem1 = *elem2;
*elem2 = temp;
}
int RandomInRange(int start, int end)
{
if (end > start)
{
srand(time(NULL));
return start + rand() % (end - start);
}
return start;
}
int Partition(int data[], int length, int start, int end)
{
if (data == NULL || length <= 0 || start < 0 || end >= length)
{
throw new exception("无效的参数");
}
int index = RandomInRange(start,end);
Swap(&data[index], &data[end]);
int small = start - 1;
for (index = start; index < end;++index)
{
if (data[index] < data[end])
{
++small;
if (small != index)
{
Swap(&data[index], &data[small]);
}
}
}
++small;
Swap(&data[small], &data[end]);
return small;
}
int MoreThanHalfNum(int *numbers,int length)
{
int middle = length >> 1;
int start = 0;
int end = length - 1;
int index = Partition(numbers, length, start, end);
while (index != middle)
{
if (index > middle)
{
end = length - 1;
index = Partition(numbers, length, start, end);
}
else
{
start = index + 1;
index = Partition(numbers, length, start, end);
}
}
int result = numbers[middle];
return result;
}
void maindssd()
{
int numbers[] = {1,2,3,2,2,2,5,4,2};
int result = MoreThanHalfNum(numbers, sizeof(numbers) / sizeof(int));
cout << result << endl;
system("pause");
}
数组中出现次数超过一半的数字
最新推荐文章于 2024-02-18 13:26:53 发布