最小值輸出為3,明顯錯誤,應該為1,但不知代碼中錯在哪,希望各位大神幫忙看一下
#include<iostream>
using namespace std;
#include<stdlib.h>
namespace A
{
int getMaxOrMin(int *a, int count, bool ifMax)
{
int temp = a[0];
int i, j;
if (ifMax)
{
for (i = 1; i < count; i++)
{
for (j = 0; j < count - i; j++)
{
if (a[j] < a[j + 1])
{
temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
cout << temp << "為最大值" << endl;
}
if (!ifMax)
{
for (i = 1; i < count; i++)
{
for (j = 0; j < count - i; j++)
{
if (a[j]>a[j + 1])
{
temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
cout << temp << "為最小值" << endl;
}
for (i = 0; i < count; i++)
{
cout << a[i] << endl;
}
return temp;
}
}
int main()
{
int arr[10] = { 2, 5, 7, 8, 4, 1, 6, 3, 9, 10 };
bool ifMax = false;
cin >> ifMax;
A::getMaxOrMin(arr, 10, ifMax);
system("pause");
return 0;
}
2017-08-11
因為當ifMax=0時,后一個小于前一個則交換位置,說明最后得到的順序數列是從小到大的,隨著i 增大,每次循環都會選出第i大的數,順序也依次從后往前排好,如果順序正確則不用進行交換,那么temp的值也不會改變,也就是說當a[j+1]=3與a[j]交換數序以后整個數列的順序都已正確,最小的那個數就不會賦值給temp了,所以打印出的temp不是最小值。輸出的temp應改為a[9]和a[0]。