赞
踩
查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素。
下面按照上面的描述顺序依次介绍各个查找的C或C++实现,以及相关优化:
通过暴力循环逐项比较该项与关键字,时间复杂度o(n);
顺序查找的实现如下:
- /*这个循环中每次循环都要判断i是否越界,针对这个情况可以提出优化*/
- int search::sequentialSearch(int* a, int n, int key)
- {
- int i;
- for (size_t i = 0; i < n; i++)
- {
- if (a[i]==key)
- {
- return i;
- }
- }
- return -1;
- }
上面的算法其实不够完美,在for循环中每次都是需要比较i和n的值;下面提出改进版:
- int search::sequentialSearch2(int* a, int n, int key)
- {
- if (a[0]==key)
- {
- return 0;
- }
- a[0] = key;
- int i = n - 1;
- while (a[i]!=key)
- {
- i--;
- }
- return i == 0 ? -1 : i;
-
- }
在上面这个版本中减少了i和n的比较次数;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。