Нахождение режима отсортированного массива с использованием бина поиска

Привет, мне было поручено написание простой программы, которая получает массив целых чисел и определяет режим, который является числом, которое чаще всего встречается в массиве.

Подход, который я пытаюсь принять, использует пузырьковую сортировку с алгоритмом поиска бункеров, мой уровень знаний находится на начальной стадии, может кто-нибудь помочь мне указать?

Где я иду не так, я считаю, что он передает правильное значение поиска, чтобы найти его в массиве! Но я могу ошибаться, но некоторая помощь будет очень цениться, заранее спасибо за то, что нашли время, чтобы попытаться помочь мне.

#include <iostream>
using namespace std;

const int arrayLength = 10;
int searchVal;
int numGroup[arrayLength];

bool isSorted(int [], int arrayLength);
int binSearch(int [],int arrayLegth,int searchVal);

int main()
{
// Take in num
for (int index = 0; index < arrayLength; index++)
{
cout << "Enter Number: ";
cin >> numGroup[index];
}// Sort numbers

//var to hold the val being swaped
int swapHolder = 0;

//bubble sort
for (int iSort = 0; iSort < arrayLength; iSort++)
{
for (int jSort = (iSort + 1); jSort <= arrayLength - 1; jSort++)
{

if (numGroup[iSort] > numGroup[jSort])
{
swapHolder = numGroup[iSort];
numGroup[iSort] = numGroup[jSort];
numGroup[jSort] = swapHolder;
}

}
}
//passes the sorted array and the length to the isSorted
isSorted(numGroup, arrayLength);return 0;
}

bool isSorted(int numGroup[], int arrayLength){

cout << "Final result" << endl;

for (int index = 0; index < arrayLength - 1 ; index++)
{

if (numGroup[index] > numGroup[index + 1])
{
cout << "it's false";
system("pause");
return false;
}
cout << numGroup[index] << endl;

//cout << arrayLength << endl;
}
cout << numGroup[arrayLength - 1] << endl;
//trying to make searchVal
for (int i = 0; i < numGroup[arrayLength - 1]; i++)
{
if (numGroup[i] == numGroup[i])
{
int searchVal = numGroup[i];
}

}
binSearch(numGroup, arrayLength, searchVal);
cout << "It's true ";
system("pause");
return true;

}

int binSearch(int numGroup[], int arrayLength,int searchVal){

int low = 0;
int high = arrayLength - 1;

int mid;
while (low <= high)
{
mid = (low + high) / 2;
//search through the array
if (searchVal == numGroup[mid])
{
return mid;
}
else if (searchVal > numGroup[mid])
{
low = mid + 1;
}
else
{
high = mid - 1;
}

}
cout << "In bin search " << mid;
return mid;
}

0

Решение

Вам не нужно сортировать массив. Вы можете иметь другой массив (частота) который будет считать числа появлений. Итак, мини-код для этого:

int myArray[10];
int freq[1000]; //we assume that the numbers are smaller than 1000

void count()
{
for(int i = 0; i < 10; ++i)
{
++freq[v[i]];
}
}

int ReturnModeElement()
{
int maxFreq = -1;
int element = -1;
for(int i = 0 ; i < 10; ++i)
{
if(freq[v[i]] > maxFreq)
{
maxFreq = freq[v[i]];
element = v[i];
}
}

return element;
}

Я надеюсь, у вас есть идея 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]