查找-顺序查找

偏执的太偏执、 2022-09-30 11:43 211阅读 0赞

1.顺序查找定义

顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。

2.顺序表查找算法

  1. /*顺序查找,a为数组,n为要查找的数组个数,key为要查找的关键字*/
  2. int Sequential_Search(int *a,int n,int key)
  3. {
  4. int i;
  5. for(i=1;i<=n;i++)
  6. {
  7. if(a[i]==key)
  8. {
  9. return i;
  10. }
  11. }
  12. return 0;
  13. }

上面这段代码非常简单,就是在数组a(元素值从下标1开始)中查看有没有关键字(key),当你需要查找复杂表结构的记录时,只需要把数组a与关键字key定义成你需要的表结构和数据类型即可。

3.顺序表查找优化

上面的算法并非足够好,因为每次循环都需要对i是否越界,即是否小于等于n作判断。事实上,还可以有更好一点的办法,设置一个哨兵,可以不需要每次让i与n作比较。

  1. /*有哨兵顺序查找*/
  2. int Sequential_Search2(int *a,int n,int key)
  3. {
  4. int i;
  5. a[0]=key;//设置a[0]为关键字值,我们称之为"哨兵"
  6. i=n; //循环从数组尾部开始
  7. while(a[i]!=key)
  8. {
  9. i--;
  10. }
  11. return i;//返回0则说明查找失败
  12. }

此时代码是从尾部开始查找,由于a[0]=key,也就是说,如果在a[i]中有key则返回i值,查找成功。否则一定在最终的a[0]处等于key,此时返回的是0,即说明a[1]~a[n]中没有关键字key,查找失败。

这种在查找方向的尽头放置”哨兵”免去了在查找过程中每一次比较后都要判断查找位置是否越界的小技巧,看似与原先差别不大,但在总数据较多时,效率提高很大,是非常好的编程技巧。当然,”哨兵”也不一定就一定要在数组开始,也可以在末端。

4.顺序查找实现(Java)

实现的目录结构

AbJwau3.png

顺序查找类

  1. package com.red.sequence.search;
  2. public class SequenceSearch {
  3. public int orderSearch(int[] arr, int key) {
  4. if(arr==null || arr.length<1 ) {
  5. return -1;
  6. }
  7. for(int i=0; i<arr.length; i++) {
  8. if(arr[i]==key) {
  9. return i;
  10. }
  11. }
  12. return -1;
  13. }
  14. }

测试类

  1. package com.red.sequence.search;
  2. public class SequenceSearchTest {
  3. public static void main(String[] args) {
  4. SequenceSearch ss = new SequenceSearch();
  5. int[] arr = new int[]{
  6. 1,16,24,35,47,59,62,73,88,99};
  7. int search = ss.orderSearch(arr, 62);
  8. System.out.println("key所在位置:" + search);
  9. }
  10. }

输出结果

  1. key所在位置:6

5.顺序查找复杂度

对于这种顺序查找算法来说,查找成功最好的情况就是在第一个位置就找到了,算法时间复杂度为O(1),最坏的情况是在最后一个位置才找到,需要n次比较,时间复杂度为O(n),当查找不成功时,需要n+1次比较,时间复杂度为O(n)。关键字在任何一位置的概率都是相同的,所以平均查找次数为(n+1)/2,所以最终时间复杂度为O(n)。

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读

    相关 顺序查找

    序表的查找分为三种。简单顺序查找、有序表的二分查找、索引表的顺序查找。这里主要介绍前两种。 一、简单顺序查找 简单顺序查找对数据表的特性没有要求,即是否具有递增递减特...

    相关 顺序查找

    一 概述 顺序查找又称为线性查找,主要用于在顺序表中的查找。顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找。 二 一般线性表的顺序查找

    相关 二分查找顺序查找

    顺序查找可以处理有序数组,也可以处理无序数组,依次遍历数组,查找待找元素,其时间复杂度为o(n);折半查找只能处理有序数组,每次查找的过程中,都会将查找范围缩小一半,其时间复杂

    相关 查找-顺序查找

    1.顺序查找定义 > 顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关

    相关 顺序查找

    1、基本思路:从表的一端开始,顺序扫描线性表,以此将扫描到的关键字 和给定的值K进行比较,若当前扫描到的值和给定值相等,则查找成功,返回它所在的位置,否则查找失败,返回0.

    相关 查找-顺序查找

    顺序查找的思路: 从数据的第一个元素开始,依次将扫描到的关键字和给定值key比较。若当前扫描到的关键字和key相等,则查找成功;若扫描结束还没有找到和key相等的元素,就表示

    相关 查找——简单顺序查找

    基本思想 从顺序表的一端开始扫描,将给定值K依次与顺序表中各数据元素的关键字进行比较,若当前扫描到的结点关键字与给定值K相等,则查找成功;若扫描结束后,仍未找到关键字等