嗨我想知道是否有人能告诉我如何设置我的最小值的初始值,以便它们不会被0初始值偏差。该程序将查看运行二进制与线性搜索所需的时间比较。这是家庭作业,当我意识到自己做了什么时,我就要把它转过来。我现在已经彻底弄乱了我的代码试图修复但我会尝试将其恢复原样。谢谢你能给我的任何帮助。
如果需要,会包含更多代码,但不想因为包含太多而得到负面评论,但决定这是最好的,然后我可以根据需要添加更多。我确定它很明显就像你应该使用while循环或其他东西,但我的大脑累了,我今晚看不到它。所以请不要笑!再次感谢。
using namespace std;
int main()
{
const int arraySize = 1000;
int numberArray[arraySize];
int searchKey = 0, linearCount = 0, binaryCount = 0,
linearMin = 0, linearMax = 0, linearTotal = 0,
binaryMin = 0, binaryMax = 0, binaryTotal = 0;
double linearAverage = 0 , binaryAverage = 0;
srand (time(NULL));
for (int loopCount = 0; loopCount < arraySize; loopCount++)
{
// gets the random number array populated with 1000 elements
getRandomNumber(numberArray, arraySize);
// gets the search key from one of the random numbers in the array
searchKey = getSearchKey(numberArray, arraySize);
// begins the comparisons for the linear Count
linearCount = doLinearSearch(numberArray, arraySize, searchKey);
// Sort method used was bubbleSort for the requirement of binary search
bubbleSort(numberArray, arraySize);
binaryCount = doBinarySearch(numberArray, arraySize, searchKey);
//linearMin = linearCount; HERE'S WHAT I ORIGINALLY HAD BUT NOW KNOW I GOOFED
/* sets the linear Minimums and Maximums and keeps a running total for average
puts the smallest number of times in linearMin and loops through until
it finds the next smallest if any and assigns it this count number*/
if (linearCount < linearMin) linearMin = linearCount;
if (linearCount > linearMax) linearMax = linearCount;
linearTotal = linearTotal + linearCount;
linearAverage = 1 * linearTotal / arraySize;
// sets the binary Minimums and Maximums and keeps a running total for average
if (binaryCount < binaryMin) binaryMin = binaryCount;
if (binaryCount > binaryMax) binaryMax = binaryCount;
binaryTotal = binaryTotal + binaryCount;
binaryAverage = 1 * binaryTotal / arraySize;
}
// Display results
cout << "After 1000 tests on " << arraySize << " element arrays, \n";
"The linear search results were:\n";
cout << "The minimum number of comparisons to find the key was: " << linearMin << endl;
cout << "The maximum number of comparisons to find the key was: " << linearMax << endl;
cout << "The average number of comparisons to find the key was: " << linearAverage << endl;
cout << "After 1000 tests on " << arraySize << " element arrays, \n";
"The binary search results were:\n";
cout << "The minimum number of comparisons to find the key was: " << binaryMin << endl;
cout << "The maximum number of comparisons to find the key was: " << binaryMax << endl;
cout << "The average number of comparisons to find the key was: " << binaryAverage << endl;
} //结束主要
我很抱歉,如果我在这里发布任何人但是...... 意识到我流泪,是的,因为最初我写了一个有效的程序,是的,这是作业。我看到的是因为在星期天之前我正在进行最后一分钟的评论,当它发现我回来的值不正确时,因为我认为每次基于我的循环的最后一次找到minimumValue。请注意,我有两个部分,我在第2部分也遇到了问题,但至少我认为我可以在第1部分进行一些信用,直到我的发现,我没有注意到,至少我会比0更好。我不是想要任何人为我做我的家庭作业!但对于那里的所有论坛,我开始认为谁对新手来说可能是最粗鲁的,或者谁可以说足够的技术喋喋不休,或者谁能获得最多积分并尝试给人留下深刻印象已经变得比支付它的概念更重要了。我确定没有人关心那里但是从今天开始我已经有了5个小时的睡眠时间,我发现一些短信确认我的丈夫(不久)再次欺骗我,我已经要求来自一些人的帮助,这些人已经使我有点工作,至少类似于一个程序,现在看起来Freddy Kruger一直在学习如何编写C ++。在这一点上,我很确定我的3.87 GPA是在大厅里摔倒了,但最重要的是我是否能得到一个奇迹,现在变得无关紧要,因为如果我无法理解它我现在应该放弃。大多数作业建立在学到的东西上,所以如果我不能做到这一点,我将做什么呢?我很抱歉,但我对此有点慢,但是我最终掌握了这些概念,我有时需要一些时间和方法,现在这个帖子我只需要一个可能对他们的声誉或制作不太感兴趣的人我感觉比我已经做的更糟糕,有人能告诉我为什么这样做不对。你说的论坛很有帮助,有人可以帮助我吗?
我应该完成的是这个 使用随机数填充1000个元素数组 从该数组创建一个搜索键并为其分配所述值 执行线性搜索并计算执行此操作所需的次数 按顺序排序数组 二元搜索也一样 在主循环中调用循环中的所有5个函数来获取1000次迭代的数据 显示具有最小比较的循环结果,每个
的最大值和平均值随机生成器和搜索关键部分单独工作,如果需要我会发布,但这里是搜索和排序的代码
int doLinearSearch(const int randomNumberArray[], const int arraySize, const int key)
{
int index = 0,
position = -1,
ctComparisons = 0;
bool keyfound = false;
while (index < arraySize && !keyfound)
{
if (randomNumberArray[index] == key)
{
keyfound = true;
position = index;
}
index++;
}
ctComparisons = index + 1;
return ctComparisons;
}
void bubbleSort(int randomNumberArray[], const int arraySize)
{
bool swapFlag;
int tempHolder;
do
{
swapFlag = false;
for (int count = 0; count < (arraySize - 1); count++)
{
if (randomNumberArray[count] > randomNumberArray[count + 1])
{
tempHolder = randomNumberArray[count];
randomNumberArray[count] = randomNumberArray[count + 1];
randomNumberArray[count + 1] = tempHolder;
swapFlag = true;
}
}
} while (swapFlag);
}
int doBinarySearch(const int randomNumberArray[], const int arraySize, const int key)
{
int firstElement = 0,
lastElement = arraySize - 1,
middleSearch,
position = -1,
ctComparisons = 0;
bool keyFound = false;
while (!keyFound && firstElement <= lastElement)
{
middleSearch = (firstElement + lastElement) / 2;
if (randomNumberArray[middleSearch] == key)
{
keyFound = true;
position = middleSearch;
}
else if (randomNumberArray[middleSearch] > key)
lastElement = middleSearch -1;
else
{
firstElement = middleSearch + 1;
}
ctComparisons ++;
}
return ctComparisons;
}
我已经尝试过每个人都给出的建议,然后是一些但不是我的问题请求我并不是说我只是想要学习所有有需要或有害生物,并且会真正感激并承诺有一天付钱它也向前发展。
我运行它并没有把我的比较计数放在除了循环的最后一次迭代之外的任何事情上。我得到的最大数字是全面的。所以你能告诉我是什么导致这是噩梦。我知道它很简单,它可能是可笑的但是请....如果你想要的话我会发布所有这些我只是因为太多的信息已经被大吼了...
答案 0 :(得分:3)
您的问题似乎是:如何让我的“min”值从循环内部检测值。
int array[5] = { 5, 4, 3, 2, 1 };
int minVal = /* what */;
for (size_t i = 0; i < 5; ++i) {
if (array[i] < minVal)
minVal = array[i];
}
// minVal should be 1, not 0.
答案是:将minVal设置为某个&gt; =您的最大值。如果你知道约束是什么,那就容易了:
int minVal = LARGEST_POSSIBLE_VALUE;
您可以使用以下语法实现此目的:
unsigned int minVal = ~0;
0的1s补码,它将是所有位设置为1时允许的最大值。但是如果你使用了签名,它会将其设置为-1。当然,你可以在那里更具体,并且
int minVal = -1;
然后进行检查
if (minVal == -1 || array[i] < minVal)
minVal = array[i];
除非你绝对需要优化额外的测试。
或者你可以使用登山
#include <climits>
int minVal = INT_MAX;
现在你的minVal将会变得很大,直到找到一个较小的值。由于循环结束时可能是通过赋值或未找到匹配的INT_MAX,因此请确保您有某种方法来确定它是哪种情况。
答案 1 :(得分:-2)
声明范围Static
的变量..以便它不会一次又一次地初始化..