题目描述:
输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;若身高差相同,选平均身高高的那两个身高;从小到大输出;
如 输入 170 181 173 186 190
输出 170 173
//分析:因为这道题要我们求身高差。但是给我们的身高序列是无序的所以有两条思路
//1.我们对每一个身高分别求身高差,要求的次数为n+n-1.....1=O(n^2),然后找出身高差最小的比较次数n,可能有多对,所以又要比较m次
//2.对现有身高排序然后算出身高差最小且平均身高更高的,如果用快速排序时间复杂度为nlog2n+查找次数n就可以得到
#include <algorithm>
#include <iostream>
using namespace std;
void SearchHigh(int highList[],int size)
{
if(size < 2)
return ;
sort(highList,highList+5);
int temp = highList[0];
int j = 0;
int disparity = highList[1]-highList[0];
for(int i = 1;i < size-1;++i)
{
if(disparity >= highList[i+1] - highList[i])
{
disparity = highList[i+1] - highList[i];
j = i;
}
}
cout<<highList[j]<<" "<<highList[j+1];
}
int main(int argc, char* argv[])
{
int a[] = {170,181,173,185,186,190,193};
SearchHigh(a,sizeof(a)/sizeof(int));
return 0;
}