题目:数组中有n个数,若要得到最大值和最小值需要进行2n-3次比较,请你设计一个算法在少于2n-3比较次数内得到最大值和最小值
<span style="font-size:14px;">#include<iostream>
using namespace std;
//交换两个数的位置大的放左边,小的放右边
void Swap(int &a, int &b)
{
int temp;
if (a < b)
{
temp = a;
a = b;
b = temp;
}
}
//调整数组
int Adjust(int A[], int length)
{
cout << "调整前" << endl;
for (int i = 0; i < length; i++)
cout << A[i] << " ";
cout << endl;
for (int i = 0; i < length - 1; i += 2)
{
Swap(A[i], A[i + 1]);
}
cout << "调整后" << endl;
for (int i = 0; i < length; i++)
cout << A[i] << " ";
cout << endl;
return 0;
}
//挑选出数组中的最大值和最小值
int MaxAndMin(int A[], int length, int &max, int &min)
{
for (int i = 0; i < length-1; i += 2)
{
if (A[i]>max)
{
max = A[i];
}
}
for (int i = 1; i < length-1; i += 2)
{
if (A[i]<min)
{
min = A[i];
}
}
return 0;
}
int main()
{
int A[100] = { 5, 1, 4, 3, 2, 6, 10, 8, 7, 9 };
int max = A[0], min = A[0];
Adjust(A, 10);
MaxAndMin(A, 10, max, min);
cout << "max:" << max << endl << "min:" << min;
return 0;
}</span>
调整前
5 1 4 3 2 6 10 8 7 9
调整后
5 1 4 3 6 2 10 8 9 7
max:10
min:1请按任意键继续. . .