您的位置:首页 > 其它

查找数组中的某位数,返回位置和查找次数

2020-04-05 07:27 387 查看

查找
编写无序顺序表顺序查找、有序顺序表顺序查找、二分查找算法。

输入输出格式
输入描述:
第一行是查找表的长度n(11<=n<=100) 第二行是查找表中的数据元素 第三行是要查找的数据元素的关键字
输出描述:
查找成功返回位序,不成功返回-1
无序的顺序查找比较的次数
查找成功返回位序,不成功返回-1
有序的顺序查找比较的次数
查找成功返回位序,不成功返回-1
二分查找比较的次数

#include <iostream>
#include<algorithm>
using namespace std;

//顺序查找
int fun(int *a,int n,int key,int &cnt)
{
int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;
if (i ==n)
return -1;
cnt = i+1;
return i ;
}
//有序查找
int fun2(int *a, int n, int key,int &cnt)
{
sort(a, a + n);
int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;
if (i == n)
return -1;
cnt = i + 1;
return i ;
}
//二分查找
int fun3(int *a, int n, int key,int &cnt)
{
int mid=0;
int i = 0, l = 0, r = n - 1;
bool f = 0;
while (l <=r)
{
mid = (l + r) / 2;
if (key == a[mid])
{
i++;
f = 1;
break;
}
else if (a[mid] > key)
{
i++;
r = mid - 1;
}
else
{
i++;
l = mid + 1;
}
}
if (f)
{
cnt = i ;
return mid;
}
return-1;
}
int main()
{
int n, a[100], key;
while (cin >> n) {
for (int i = 0; i < n; i++)
cin >> a[i];
cin >> key;
int cnt = 0;
cout << fun(a, n, key, cnt) << endl;
cout << cnt << endl;
cout << fun2(a, n, key, cnt) << endl;
cout << cnt << endl;
cout << fun3(a, n, key, cnt) << endl;
cout << cnt << endl;
}
return 0;
}


运行结果:

  • 点赞
  • 收藏
  • 分享
  • 文章举报
一只很菜但是好学的猪 发布了38 篇原创文章 · 获赞 1 · 访问量 1577 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐