#include <iostream>
using namespace std;
//最小值和最大值的求解,时间复杂度最多是3[n/2],依据算法导论第九章.
void swap(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
void Grial(int a[],int n)
{
int i = 0;
if(a[i]>a[i+1])
{
swap(a[i],a[i+1]);
}
for(int j = i+2;j<n-1;j+=2)
{
if(a[j]>a[j+1])
{
if(a[j]>a[1])
swap(a[j],a[1]);
if(a[j+1]<a[0])
swap(a[j+1],a[0]);
}
else
{
if(a[j]<a[0])
swap(a[j],a[0]);
if(a[j+1]>a[1])
swap(a[j+1],a[1]);
}
if(n%2!=0 && j==n-3)
{
if(a[n-1]<a[0])
swap(a[n-1],a[0]);
if(a[n-1]>a[1])
swap(a[n-1],a[1]);
break;
}
}
cout<<a[0]<<endl;
cout<<a[1]<<endl;
}
int main()
{
int a[]={5,4,3,2,8,0,8,9,76,6,1000};
Grial(a,11);
return 0;
}
C++数组求最大值及最小值最快方法(3[n/2]的时间效率)
最新推荐文章于 2025-03-29 14:28:12 发布