当前位置:   article > 正文

C语言:数据结构之查找--顺序查找_用c语言写出从50个字节无序表中查找关键字“xxh”

用c语言写出从50个字节无序表中查找关键字“xxh”

概念:

    查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素。

主要查找算法:

  1. 顺序表查找:顺序表查找属于无序查找,从第一个关键字开始,逐个关键字进行比较,查找给定关键字;
  2. 二分查找:又称折半查找,属于有序查找,在进行查找之前需要对查找表进行排序,使查找表有序,这样能方便快速查找;
  3. 插值查找:是对二分查找的优化,通过将数据内容与中值关系进行联系,加快查找速度;
  4. Fibonacci查找:也是一种有序查找,利用换黄金分割原理实现,实质就是调整中值;
  5. 线性索引查找:将索引项集合组织为线性结构;
  6. 散列查找:通过散列函数直接获取存储位置;

下面按照上面的描述顺序依次介绍各个查找的C或C++实现,以及相关优化:

顺序表查找:

通过暴力循环逐项比较该项与关键字,时间复杂度o(n);

顺序查找的实现如下:

  1. /*这个循环中每次循环都要判断i是否越界,针对这个情况可以提出优化*/
  2. int search::sequentialSearch(int* a, int n, int key)
  3. {
  4. int i;
  5. for (size_t i = 0; i < n; i++)
  6. {
  7. if (a[i]==key)
  8. {
  9. return i;
  10. }
  11. }
  12. return -1;
  13. }

上面的算法其实不够完美,在for循环中每次都是需要比较i和n的值;下面提出改进版:

  1. int search::sequentialSearch2(int* a, int n, int key)
  2. {
  3. if (a[0]==key)
  4. {
  5. return 0;
  6. }
  7. a[0] = key;
  8. int i = n - 1;
  9. while (a[i]!=key)
  10. {
  11. i--;
  12. }
  13. return i == 0 ? -1 : i;
  14. }

在上面这个版本中减少了i和n的比较次数;

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/807674
推荐阅读
相关标签
  

闽ICP备14008679号