取数组中最小的两位

取出数组中最小的两位元素

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void findTwoMin() {
    int roadNumber = 10;
    int roadWeight[roadNumber];
    srand((unsigned int) time(0));
    // 随机生成十个数
    for (int i = 0; i < roadNumber; ++i) {
        roadWeight[i] = rand();
    }
    // 将第一个元素与第二个元素设为两位最小的元素
    int firstMin = roadWeight[0];
    int secondMin = roadWeight[1];
    for (int k = 2; k < roadNumber; ++k) {
        // 如果第一个较小的元素大于第K个元素,将第K个元素赋值给第一个较小的元素
        if (firstMin > roadWeight[k]) {
            firstMin = roadWeight[k];
        } else if (secondMin > roadWeight[k]) {
            secondMin = roadWeight[k];
        }
    }
    for (int j = 0; j < roadNumber; ++j) {
        cout << roadWeight[j] << " ";
    }
    cout << endl;
    cout << firstMin << " " << secondMin << endl;
}

这个是第一个版本,有bug,例如:

输入:2009 18986 19428 5345 5849 25559 1823 13740 31562 10067
输出:1823 5345

在后面比较的过程中,当k为2时,第k个元素为19428,与firstMin比较,不小于firstMin,进入下一次循环,问题出现在这个比较上,有可能出现第k个元素的值虽然小于firstMin,但是firstMin的值也小于secondMin的值,例如当k为6时,第k个元素为1823,此时firstMin为2009,secondMin为5345,若将1823赋值给firstMin,则会错过此时较小的2009,导致最终结果出错。

修改如下

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void findTwoMin() {
    int roadNumber = 10;
    int roadWeight[roadNumber];
    srand((unsigned int) time(0));
    // 随机生成十个数
    for (int i = 0; i < roadNumber; ++i) {
        roadWeight[i] = rand();
    }
    // 将第一个元素与第二个元素设为两位最小的元素
    int firstMin = roadWeight[0];
    int secondMin = roadWeight[1];
    for (int k = 2; k < roadNumber; ++k) {
        // 如果较小的元素有任一个大于第k个元素,则将第k个元素赋值给firstMin和secondMin中较大的那个
        // 这样在三个元素中:第k个元素,firstMin,secondMin,最后firstMin和secondMin为较小的两个
        if (firstMin > roadWeight[k] || secondMin > roadWeight[k]) {
            firstMin > secondMin ? firstMin = roadWeight[k] : secondMin = roadWeight[k];
        }
    }
    for (int j = 0; j < roadNumber; ++j) {
        cout << roadWeight[j] << " ";
    }
    cout << endl;
    cout << firstMin << " " << secondMin << endl;
}
posted @ 2019-12-30 19:13  Another7  阅读(189)  评论(0编辑  收藏  举报