网上看了一部分代码,很多写的比较乱,代码也不全,现在整理了一下代码以便学习
顺序查找算法比较简单,在一个线性表中,按照从前往后或者从后往前的顺序依次查找,如果查找到关键字和给定值相等,则返回给定值的位置,查找成功;如果查找值最后一个元素仍未找到,则查找失败。
package find; import java.util.Scanner; public class shunxu { public static void main(String[] args) { int[] a={1,2,3,5,7,9,10,11,12,11}; int n=a.length; System.out.println("请输入想要查找的数值:"); Scanner sc=new Scanner(System.in); int key=sc.nextInt(); int s=Sequential_Search(a,n,key); if(s==0){ System.out.println("没有这个数据"); }else{ System.out.println("查到数据为第"+s+"个数"); } } /*顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键字*/ private static int Sequential_Search(int a[],int n,int key) { int i; for(i=0;i<n;i++) { if(a[i]==key){ return i+1; } } return 0; } }
有一种改进的算法,引入了哨兵的思想,所谓哨兵就是将关键字用一个数组位置去存储,保证在循环的过程中不必判断数组是否越界,因为执行到最后一个元素时,一定会跳出循环。在一定程度上优化了普通查找算法。
package find; import java.util.Scanner; public class shunxu2 { public static void main(String[] args) { int[] a={1,2,3,5,7,9,10,11,12,11}; int n=a.length; System.out.println("请输入想要查找的数值:"); Scanner sc=new Scanner(System.in); int key=sc.nextInt(); int s=Sequential_Search(a,n,key); if(s==0){ System.out.println("没有这个数据"); }else{ System.out.println("查到数据为第"+s+"个数"); } } /*有哨兵顺序查找*/ private static int Sequential_Search(int a[],int n,int key) { int i; a[0]=key;//设置a[0]为关键字值,称为哨兵 i=n-1; //循环从数组尾部开始 while (a[i]!=key){ i--; } return i+1; } }