1、经常使用数组查找算法java
工做原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每一个元素,知道找到所需元素的过程。算法
例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1数组
1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.out.println("请输入要获取的数"); 7 Scanner input=new Scanner(System.in); 8 int number=input.nextInt(); 9 int index=-1;//找到数组中所在数的下标,找不到等于-1
10 for(int i=0;i<array.length;i++) 11 { 12 if(array[i]==number) 13 { 14 index=i+1; 15 break; 16 } 17 } 18 if(index!=-1) 19 { 20 System.out.println("找到该数字,在数组中的第"+index+"位置"); 21 } 22 else
23 { 24 System.out.println("要查找的数字不存在"); 25 } 26 } 27 }
例2:求数组中的最大值,最小值ide
1 public class LinearSearch{ 2 public static void main(String []argas) 3 { 4 int [] array={10,100,90,65,80,92}; 5 //求数组中的最大值,最小值
6 int max=array[0];//最大值
7 int min=array[0];//最小值
8 for(int i=1;i<array.length;i++) 9 { 10 if(max<array[i]) 11 { 12 max=array[i]; 13 } 14 if(min>array[i]) 15 { 16 min=array[i]; 17 } 18 } 19 System.out.println("该数组的最大值为"+max+",最小值为"+min); 20 } 21 }
2、二分查找法spa
工做原理:它又称为折半查找法,将数组中间位置记录的关键字与查找关键字比较,若是二者相等,则查找成功;不然利用中间位置记录将数组分红前、后两个子数组,若是中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,不然进一步查找后一子数组。重复以上过程,直到找到或找不到为止。3d
注:针对有序数组code
1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int[] array2={1,2,3,4,5,10,15,18,19,22}; 6 System.out.println("请输入要获取的数"); 7 Scanner input=new Scanner(System.in); 8 int number=input.nextInt(); 9 int index=-1;//找到数组中所在数的下标,找不到等于-1
10 int start=0;//起始下标
11 int end=array2.length-1;//终止下标
12 int middle; 13 while(start<=end) 14 { 15 //找到中间下标所对应的元素值
16 middle=(start+end)/2; 17 int number2=array2[middle]; 18 //假如要查找的那个数大于中间比较的那个数 19 //去掉左边的数
20 if(number>number2) 21 { 22 start=middle+1; 23 } 24 //保留左边的数,去掉右边的数
25 else if(number<number2) 26 { 27 end=middle-1; 28 } 29 else
30 { 31 index=middle+1; 32 break; 33 } 34 } 35 if(index!=-1) 36 { 37 System.out.println("找到该数字,在数组中的第"+index+"位置"); 38 } 39 else
40 { 41 System.out.println("要查找的数字不存在"); 42 } 43
44 } 45 }
3、冒泡排序法blog
工做原理:比较相邻的元素,若是第一个比第二个大,就交换它们两个。对每一对相邻元素作一样的工做,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数。针对除了最后一个元素之外全部的元素重复以上的步骤。直到没有任何一对数字须要比较。排序
1 public class BubbleSort{ 2 public static void main(String []argas) 3 { 4 int[] array={80,53,12,90,35,22,65,45,82,33}; 5 //N个数比较的轮数为N-1次
6 for(int i=0;i<array.length-1;i++) 7 { 8 //每一轮比较的次数为N-1-i次
9 for(int j=0;j<array.length-i-1;j++) 10 { 11 //比较相邻的2个数,小靠前
12 if(array[j]>array[j+1]) 13 { 14 //两个数作交换,经过设置临时变量
15 int temp=array[j]; 16 array[j]=array[j+1]; 17 array[j+1]=temp; 18 } 19 } 20 } 21 //把排好序的数组输出
22 for(int i=0;i<array.length;i++) 23 { 24 System.out.print(array[i]+","); 25 } 26 } 27 }
4、选择排序法input
工做原理:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,而后,再从剩余未排序元素中继续寻找最小元素,而后放到排序序列末尾。以此类推,直到全部元素均排序完毕。
1 public class SelectSort{ 2 public static void main(String []argas) 3 { 4 int[] array={80,53,12,90,35,22,65,45,82,33}; 5 int min=0;//保存最小元素值的下标 6 //N个数比较的轮数为N-1次
7 for(int i=0;i<array.length-1;i++) 8 { 9 min=i; 10 //查找最小数在数组中的下标
11 for(int j=i+1;j<array.length;j++) 12 { 13 if(array[min]>array[j]) 14 { 15 min=j;//保存最小数的下标
16 } 17 } 18 //若是第i个数位置不在i上,则进行交换
19 if(i!=min) 20 { 21 int temp=array[i]; 22 array[i]=array[min]; 23 array[min]=temp; 24 } 25 } 26
27 for(int i=0;i<array.length;i++) 28 { 29 System.out.print(array[i]+","); 30 } 31 } 32 }
5、插入排序法
工做原理:它是经过构建有序序列,对于为排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。从后向前扫描过程当中,须要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
1 public class InsertSort{ 2 public static void main(String []argas) 3 { 4 int[] array={80,53,12,90,35,22,65,45,82,33}; 5 for(int i=1;i<array.length;i++) 6 { 7 int temp=array[i]; 8 //把下标保存起来
9 int j=i; 10 while(j>0&&temp<array[j-1]) 11 { 12 //上面的数覆盖其下面的数
13 array[j]=array[j-1]; 14 j--; 15 } 16 array[j]=temp;//插入数据
17 } 18
19 for(int i=0;i<array.length;i++) 20 { 21 System.out.print(array[i]+","); 22 } 23 } 24 }