循环搜索(使用标志位)

转载 2006年06月22日 14:07:00
初學者看到循序搜尋,多數都會使用以下的方式來進行搜尋:
while(i < MAX) {
    if(number[i] == k) {
        printf("找到指定值");
        break;
    }
    i++;
}

 

這個方法基本上沒有錯,但是可以加以改善,可以利用設定衛兵的方式,省去if判斷式,衛兵通常設定在數列最後或是最前方,假設設定在列前方好了(索引0的位置),我們從數列後方向前找,如果找到指定的資料時,其索引值不是0,表示在數列走訪完之前就找到了,在程式的撰寫上,只要使用一個while迴圈就可以了。

public class LinearSearch {
  public static int search(int[] number, int des) {
    int len = number.length;
    int[] tmp = new int[len + 1];
    /*
    for (int i = 1; i < tmp.length; i++) {
      tmp[i] = number[i - 1];
    }*/
    System.arraycopy(number,0,tmp,1,len);
    tmp[0] = des;

    int k = tmp[0];
    int i = number.length;
    while (tmp[i] != k)
      i--;
    return i - 1;
  }

  public static void main(String[] args) {
       int[] number = {1, 4, 2, 6, 7, 3, 9, 8};
       int find = LinearSearch.search(number, 8);
       if(find != 0)
         System.out.println("找到數值於索引" + find);
       else
         System.out.println("找不到數值");
  }
}

相关文章推荐

通过设置标志位tag判断队空队满的循环队列

首先我们定义一个具有基本操作方法的Queue类,在这个类中我们设置了一个bool型的变量tag,通过判断tag的值来判断队列是否为空、是否为满。具体是:rear==front&&!tag为空,rear...
  • lrwwll
  • lrwwll
  • 2016年11月04日 10:52
  • 1980

要求顺序循环队不损失一个空间,全部能够得到有效利用,试采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法

头文件:函数的声明 #include #include #define QUEUESIZE 100 typedef char ElemType; typedef struct { Elem...

流状态标志位

  • 2012年12月14日 15:10
  • 410KB
  • 下载

汇编标志位

  • 2013年05月09日 16:12
  • 524B
  • 下载

sync、fsync、fdatasync三个函数以及O_SYNC标志位的区别

在大多数的unix/linux对磁盘io的写操作都是通过缓存来完成的,基本的原理如下:当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等...

汇编标志位

  • 2012年01月04日 10:34
  • 935KB
  • 下载

与外中断有关的寄存器和标志位

  • 2009年07月29日 13:02
  • 321KB
  • 下载

后缀s是如何影响标志位的

【转载】http://blog.chinaunix.net/uid-28247462-id-3372904.html 1.ARM指令条件码前缀的作用:         ARM指令可以通过添加适...

PLC特殊标志位

  • 2014年12月04日 19:02
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:循环搜索(使用标志位)
举报原因:
原因补充:

(最多只允许输入30个字)