数据结构与算法----顺序查找法
2017-09-18 20:22
471 查看
两种方法
1.普通方法,倒序(顺序)遍历数组中的每个元素,与查找元素相比较,时间复杂度为O(n)。
2.哨兵方法。将数组第一个元素置为要查找的元素,然后倒序遍历数组每一个元素,和查找元素相比。但是因为数组第一个为查找元素,所以当找不到元素的时候,就会把数组第一个元素和查找元素相比。:没有判断越界的代码了,即普通方法中的“i>=0”。对于数据较多(>=1000)的情况下,哨兵比普通方法所需平均时间减少了一半。
整个测试源代码:
1.普通方法,倒序(顺序)遍历数组中的每个元素,与查找元素相比较,时间复杂度为O(n)。
static int search_seq2(int a[],int n,int key) { for(int i = n-1;i>=0;i--) { if(a[i] == key) return i; } return -1 ; }
2.哨兵方法。将数组第一个元素置为要查找的元素,然后倒序遍历数组每一个元素,和查找元素相比。但是因为数组第一个为查找元素,所以当找不到元素的时候,就会把数组第一个元素和查找元素相比。:没有判断越界的代码了,即普通方法中的“i>=0”。对于数据较多(>=1000)的情况下,哨兵比普通方法所需平均时间减少了一半。
static int search_seq1(int a[],int n ,int key) { a[0] = key; int i = n; while(a[i] != key) {//没有越界判断 i--; } return i; }
整个测试源代码:
public class Search_seq {
//哨兵
static int search_seq1(int a[],int n ,int key) {
a[0] = key;
int i = n;
while(a[i] != key) {
i--;
}
return i;
}
//无哨兵
static int search_seq2(int a[],int n,int key) { for(int i = n-1;i>=0;i--) { if(a[i] == key) return i; } return -1 ; }
public static void main(String[] args) {
int[] b = {0,2,4,4,5,9,23};
int i = Search_seq.search_seq1(b, b.length-1, 4);
if(i!=-1) {
System.out.println("find!");
}
else
System.out.println("notexit!");
int[] a = {2,4,4,5,9,23};
int i = Search_seq.search_seq2(a,a.length,4);
if(i != 0 )
System.out.println("find!");
else
System.out.println("notexit!");
}
}
相关文章推荐
- 数据结构与基本算法的学习笔记-顺序搜索-2
- 数据结构与算法中的拓扑排序方法
- 数据结构与算法之 二叉树 (一)递归算法
- 零零散散学算法之详解几种数据存储结构
- 算法:一元多项式的表示及相加(链表实现)-数据结构(4)
- 数据结构与算法-第12章二叉树和其他树-004求二叉树的最多结点数及对应的层数
- 【数据结构与算法】选择排序
- 数据结构之(图最短路径之)Floyd(弗洛伊德)算法
- 数据结构与算法问题 AVL二叉平衡树
- 省选算法学习-数据结构-虚树
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- JavaScript数据结构与算法之集合(Set)
- HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST
- Linux C Function()参考之数据结构及算法篇
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 【数据结构与算法】——排序综述
- 数据结构及算法-算法是什么?
- 数据结构及算法练习--链表相关
- 【数据结构与算法】排序算法之五:归并排序
- 数据结构与算法——约瑟夫问题