题目:
设计一个算法:用不多于3n/2的平均比较次数,在一个有n个整数的顺序表中找出最大值和最小值的元素
出错原因:
当初,想的是分别设一个max=min=data[0],然后求最大值最小值的时候,分别遍历顺序表,但是这样的比较次数为2n,因此排除了,然后想用If与else if,直接将max和min与data[j]比较,然后当时觉得,这平均次数也是2n,其实并不是,因为是if和else if 两个分支只能执行一个,不可以同时执行的。
正确思路:
用If和else if ,将max和min 分别和data[j]比较,而不是用data[j]和data[j+1]比较,大的存入Max,小的存入min ,这个算法太耗时间
代码:
template <class T>
void SeqList<T>::Search_maxnmix() {
int max = data[0];
int min = data[0];
for (int j = 0; j <= last; j++) {
if (max < data[j])
{
max = data[j];
}
else if (min > data[j]) {
min = data[j];
}
}
cout << "最大值为:" << max << endl;
cout << "最小值为:" << min << endl;
}
主函数调用
#include "seqList.h"
#include <iostream>
using namespace std;
int main()
{
SeqList<int> com(20);//创建一个顺序表com ,长度为20
com.Input();//输入顺序表元素
com.Search_maxnmix();
return 0;
}
头文件的声明,SeqList类函数的定义均未给出,详情见上一篇文章:顺序表的调用。