二分法
查找指定元素在数组中的位置时,以前的方式是通过遍历,逐个获取每个元素,看是否是要查找的元素,这种方式当数组元素较多时,查找的效率很低
二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率
需求
在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置
- 实现步骤
1. 定义两个变量,表示要查找的范围。默认min = 0 ,max = 最大索引
2. 循环查找,但是min <= max
3. 计算出mid的值
4. 判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
5. 如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找
6. 如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找
7. 当min > max 时,表示要查找的元素在数组中不存在,返回-1.*/package konoha.naruto.BinarySearch; public class demo1 { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,7,8,9,10}; int num = 0; int a = BinarySearchForIndex(arr,num); System.out.println(a); } private static int BinarySearchForIndex(int[] arr, int num) { //定义查找范围 int min = 0; int max = arr.length-1; //循环查找 while(min<= max){ //计算出中间位置 int mid = (min+max)>>1; //mid指向的元素比给出的数字小 说明数字在mid的右边 最小值范围改变 if(arr[mid]<num){ min = mid+1; //mid指向的元素比给出的数字大 说明数字在mid的左边 最大值范围改变 }else if(arr[mid]>num){ max = mid-1; //mid指向的元素跟给出的数字相等 说明数字跟mid重合 返回mid }else{ return mid; } //给出的值不在范围内 返回不存在的索引 }return -1; } }
递归
递归的介绍
以编程的角度来看,递归指的是方法定义中调用方法本身的现象
把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
package konoha.naruto.Recursive; public class test01 { public static void main(String[] args) { //递归求1-100数字和 //递归求5的阶乘 int sum = getSum(100); int mul = getFatorial(5); System.out.println(sum); System.out.println(mul); } private static int getFatorial(int i) { if(i==1){ return 1; }else{ return i*getFatorial(i-1); } } private static int getSum(int i) { if(i==1){ return 1; }else{ return i+getSum(i-1); } } }
冒泡排序
冒泡排序概述
一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序
如果有n个数据进行排序,总共需要比较n-1次
每一次比较完毕,下一次的比较就会少一个数据参与
package konoha.naruto.BubbleSort; public class test01 { public static void main(String[] args) { int[] arr = {6, 3, 2, 1, 4, 5}; BubbleSort(arr); } public static void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } System.out.println(); } public static void BubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } print(arr); } } }