当前位置:   article > 正文

【数据结构】[第七章 查找][自用]

【数据结构】[第七章 查找][自用]

1基本概念

(1)

(2)静态与动态查找表

(3)查找长度 与 平均查找长度(成功与失败)

2 普通查找

2.1 顺序查找

(1)代码:

  1. static int sequentialSearch(vector<int> arr, int target){
  2. for (int i = 0; i < arr.size(); ++i) {
  3. if (arr[i] == target) {
  4. return i; // 如果找到目标值,则返回索引
  5. }
  6. }
  7. return -1; // 如果未找到目标值,则返回 -1
  8. }
  9. //王道代码:
  10. static int sequentialSearch(vector<int> arr, int target){
  11. for (int i = 0; i < arr.size()&&arr[i] != target; ++i);
  12. return i==arr.size()?-1:i; // 如果未找到目标值,则返回 -1
  13. }

(2)查找效率分析:

(3)改进:

  1. 查找概率相等:
  2. 查找概率不相等:所以要根据情况来选择优化方式。

2.2 折半查找

(1)代码:

  1. //二分查找函数
  2. static int binarySearch(const vector<int>& arr, int target) {
  3. int left = 0;
  4. int right = arr.size() - 1;
  5. while (left <= right) {
  6. int mid = left + (right - left) / 2; // 计算中间位置
  7. // 如果目标值等于中间元素,则返回中间位置
  8. if (arr[mid] == target) {
  9. return mid;
  10. }
  11. // 如果目标值小于中间元素,则在左侧继续查找
  12. else if (arr[mid] > target) {
  13. right = mid - 1;
  14. }
  15. // 如果目标值大于中间元素,则在右侧继续查找
  16. else {
  17. left = mid + 1;
  18. }
  19. }
  20. // 如果未找到目标值,则返回 -1
  21. return -1;
  22. }

(2)过程:

  • 注意:折半查找,仅仅适用于有序的顺序表。不适用于链表,因为链表不具备随机存取这一特性。

(3)查找效率:

(4)折半查找判定树的构造:

下图中,数字只代表顺序,不代表值。

(5)与顺序查找相比&#x

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/736731
推荐阅读
相关标签
  

闽ICP备14008679号