使用bin搜索查找已排序数组的模式

时间:2017-02-12 15:18:22

标签: c++ arrays sorting search mode

您好我已经负责编写一个给定整数数组的简单程序并确定模式,这是数组中最常出现的数字。

我正在尝试采用的方法是使用带有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;
}

1 个答案:

答案 0 :(得分: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;
}

我希望你有这个主意:)