2017-02-12 6 views
0

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

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

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

#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

Вы можете заменить свой BUBLE сортировать по 'станд :: sort'. – Jarod42

+0

Нечего искать. Подсчитайте длину каждой повторяющейся числовой последовательности отсортированного массива, затем найдите самый длинный. – felix

+0

У меня есть склонность к сложным проблемам/задачам, подумайте, что это можно решить более простым/простым способом. – Cerberus

ответ

0

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

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

Спасибо, но я не уверен на 100%, что происходит внутри вашего кода. Я думаю, что могу следовать, но не уверенно на 100%, поскольку я избегаю до того, как мои знания находятся на уровне новичков. – Cerberus

+0

В этом коде вы просто подсчитываете количество явлений каждого элемента и затем выбираете максимальный из них. –