顺序表查找及其优化(Java)

顺序表查找(线性查找):

 1 private static void Ordersearch(int[] arr,int num) {
 2         for (int i = 0; i < arr.length; i++) {
 3             if (arr[i]==num) {
 4                 System.out.println(arr[i]);
 5                 return;
 6             }
 7         }
 8         System.out.println("not found ");
 9
10 }

优化方案:上面的方式每次循环都要判断i是否越界,可以通过设置哨兵解决这个问题。

private static void Ordersearch(int[] arr,int num) {
        int count=arr.length-1;
        int min=arr[0];
        arr[0]=num;
        while(arr[count]!=num){
            count--;
        }
        if (min==arr[count]) {
            System.out.println(arr[count]);
        }else {
            System.out.println("not found");
        }
}
时间: 2024-10-26 09:52:21

顺序表查找及其优化(Java)的相关文章

顺序表查找的优化

来源于书本,这个小技巧还是记录一下,其实它所表达的意思就是,for循环和while循环的一点微妙区别.在for循环中,比如: for(i=1;i<=n;i++) { if(a[i]==key) return i; } 比较.自增.加上边界的判定,一共需3步,而while循环,则只需要两步,减去了边界判定的一步. while(a[i]!=key) { i--; } int search(int a[],int n,int key) { int i; a[0]=key;/*设置a[0]为关键字值,称

顺序表查找算法及其优化

顺序查找算法实现如下: var arr = [5, 2, 4, 3, 1] , sequentialSearch = function(arr, val) { var i = 0 , len = arr.length; for ( ; i < len; i++) { // 比较一次 if (arr[i] === val) { // 比较二次 return i; } } return i; // 返回len,则说明查找失败 } 这里并不是足够完美, 因为每次循环时都需要对i是否越界, 即是否小于l

查找 - 顺序表查找

#include<cstdio> #include<cstring> #include<cstdlib> int Sequential_Search1(int *a,int n,int key){ int i; for(i=0;i<=n;i++){ if(a[i] == key) return i; } return 0; } int Sequential_Search2(int *a,int n,int key){ int i; a[0] = key; i =

顺序表查找和有序表查找

查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释. 1 #include <iostream> 2 using namespace std; 3 4 //顺序表查找(线性查找.静态表查找) 时间复杂度为O(n) 5 int Seq_Search(int *s,int n,int key) 6 { 7 s[0] = key; //设置了一个哨兵,避免了每次比较一次过后都要判断查找位置是否越界 8 int i = n; 9 while

分块查找(索引顺序表查找)

分块查找:分块查找又称索引顺序查找,它是顺序查找的一种改进方法. 方法描述:将n个数据元素"按块有序"划分为m块(m<=n).每一块中的数据元素不必有序,但块与块之间必须"按块有序",即第1快中的任一元素的关键字都必须小于第2块中任一元素的关键字:而第2块中任一元素又都小于第3块中的任一元素,-- 图示分块如下: 操作步骤: 1.先选取各快中的最大关键字构成一个索引表 2.查找分两部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中:然后在已确定的

算法学习之查找算法:静态查找表(1)顺序表查找

引言: 对查找表一般的操作有:1.查询某个"特定的"数据元素是否在查找表中:2.检索某个"特定的"数据元素的各种属性:3.在查找表中插入一个数据元素:4.从查找表中删去某个数据元素. 静态查找表的操作只包括两种:1.查找某个"特定的"数据元素是否在查找表中:2.检索某个"特定的"数据元素的各种属性: 静态查找表又有四种表现形式:顺序表的查找.有序表的查找.静态树的查找.索引顺序表的查找. 静态查找涉及的关键字类型和数据元素类型

一个Netfilter nf_conntrack流表查找的优化-为conntrack增加一个per cpu cache

独悲需要忍受,快乐需要分享对Linux协议栈多次perf的结果,我无法忍受conntrack的性能,然而它的功能是如此强大,以至于我无法对其割舍,我想自己实现一个快速流表,但是我不得不抛弃依赖于conntrack的诸多功能,比如state match,Linux NAT等,诚然,我虽然对NAT也是抱怨太多,但不管怎样,不是还有很多人在用它吗.       曾经,我针对conntrack查找做过一个基于离线统计的优化,其思路很简单,就使用动态的计算模式代替统一的hash算法.我事先会对经过该BOX

数据结构Java实现01----线性表与顺序表

一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有后继数据元素. 则称这样的数据结构为线性结构. 二.线性表抽象数据类型: 1.线性表抽象数据类型的概念: 线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合. 数据集合: 可以表示为a0,a1,a2,...an-1,每个数据元素的数据类型可以是任意的类型. 操作集合包括如下: 1

数据结构Java实现02----线性表与顺序表

[正文] 本节内容: 线性结构 线性表抽象数据类型 顺序表 顺序表应用 一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有后继数据元素. 则称这样的数据结构为线性结构. 二.线性表抽象数据类型: 1.线性表抽象数据类型的概念: 线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合. 数据集合: 可以表示为a0,a1,a2,...a