如何使用冒泡排序确定最大数字[C++]

如何使用冒泡排序确定最大数字[C++],c++,bubble-sort,C++,Bubble Sort,我的任务是创建一个函数,确定从文本文件读取的给定数组的最大数目。我已经研究过使用冒泡排序,我认为既然作业不要求排序的数字,就没有必要这样存储它们 这是我到目前为止得到的 void determineWinner(string namesArr[], float votesArr[], int size) { int temp = 0; string tempname; for (int i = 0; i < size; i++) { if

我的任务是创建一个函数,确定从文本文件读取的给定数组的最大数目。我已经研究过使用冒泡排序,我认为既然作业不要求排序的数字,就没有必要这样存储它们

这是我到目前为止得到的

void determineWinner(string namesArr[], float votesArr[], int size)
{
    int temp = 0;
    string tempname;

    for (int i = 0; i < size; i++)
    {
        if (votesArr[i] > votesArr[i + 1])
        {
            temp = votesArr[i];
            tempname = namesArr[i];
            votesArr[i] = votesArr[i + 1];
            namesArr[i] = namesArr[i + 1];
            votesArr[i + 1] = temp;
            namesArr[i + 1] = tempname;
        }
    }
}
最终会成为

1800, 2500, 4000, 5000, 6000

我想我遇到了一个运行时错误,程序名已经停止工作,我能做些什么来解决这个问题?

你的问题是数组的大小是5,意味着它包含元素0,1,…,4,你想从I=0迭代到I votesArr[4+1],这是不合法的,因为第4个元素是最后一个,没有第5个

所以要么从i=1开始,做一些类似于votesArr[i-1]>votesArr[i]的事情,要么你只去i
想想当你只有两个元素的时候。您只需要进行一次比较。

您还应该尝试使用冒泡排序算法,因为我不想破坏一个解决方案,这似乎是不正确的。您将是第一个在上实现冒泡排序的人-


如果您只需要最高的元素,您应该在内存中保留temp变量的实际最高值,并在每次找到较大的元素时覆盖它。

由于这是一个赋值,我不会直接给出答案,但是,如果文件内容不是太大,可以考虑将其存储到std::vector中,并使用std::max\u元素来查找最大值。max=-一些大数值;对于数组{if element>max max=element}中的每个元素,请研究如何使用调试器。崩溃的原因很可能是因为您正在访问一个超过数组末尾的数组-您应该循环直到大小为-1。然而,您的代码并不能解决您的问题,插入排序总是比冒泡排序好,而且您也不需要对数组进行排序。@Archbishopfanterbury:这个向量听起来是多余的。max_元素只需要一个正向迭代器,而istream_迭代器可以直接从文件中读取。
1800, 2500, 4000, 5000, 6000