2017-02-12 5 views
0

안녕하세요 저는 정수 배열을 가진 간단한 프로그램을 작성하고 배열에서 가장 자주 나타나는 숫자를 결정합니다.bin 검색을 사용하여 정렬 된 배열의 모드 찾기

내가 채택하려고하는 접근 방식은 빈 검색 알고리즘을 사용하는 버블 정렬을 사용하는 것입니다. 내 수준의 지식은 초보자 단계에서 누군가 나를 도울 수 있습니까?

어디에서 잘못 가고 있는지 정확한 배열을 찾기 위해 검색 값을 전달하는 것입니다! 하지만 어쩌면 틀렸을 지 모르지만 도움을 청할 시간이 필요하신 분을 미리 감사드립니다.

#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

당신은'표준 : sort'하여 buble 종류를 대체 할 수있어 바랍니다. – 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 % 확신 할 수는 없다고 생각한다. – Cerberus

+0

그 코드에서 각 요소의 출현 횟수를 세고 그런 다음 그 출현에서 최대 하나를 선택한다. –