取數組中最小的兩位

取出數組中最小的兩位元素

#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,例如:ios

輸入: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,致使最終結果出錯。spa

修改以下code

#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;
}
相關文章
相關標籤/搜索