一、递归
概述:方法内部自己调用自己
分类:
直接递归:自己调用自己
间接递归:多个方法之间来回调用
注意: 递归必须要有出口,否则会出现“栈内存溢出” 。 递归即使有出口,递归次数也不要太多
public class Demo01Recursion {
public static void main(String[] args) {
method(3);
}
//输出3-1
public static void method(int n){
if (n==1){
System.out.println(n);
return;
}
System.out.println(n);
n--;
method(n);
}
}
public class Demo02Recursion {
public static void main(String[] args) {
int method=method(2);
System.out.println(method);
}
//阶乘
public static int method(int n){
if (n==1){
return 1;
}
return n*method(n-1);
}
}
public class Demo03Recursion {
public static void main(String[] args) {
int s=method(6);
System.out.println(s);
}
/*
* 斐波那契数列(Fibinacci sequence),又称黄金分割线,是因为数学家莱昂纳多斐波那契(Leonardo Fibinacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
斐波那契数列:1,1,2,3,5,8,13,21,34,........
从第三项开始,每一项等于前两项之和
*/
public static int method(int n){
if (n==1 || n==2){
return 1;
}
return method(n-2)+method(n-1);
}
}
二、冒泡排序
概述:数组的冒泡排序,是将数组中的元素按照大小进行排序的,默认都是以升序进行排序。排序,都要进行数组元素大小的比较,在进行位置的交换,冒泡排序是采用的数组中相邻元素进行换位。
冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是对待排序的元素从前向后依次比较相邻的两个元素,如果顺序不对则交换它们的位置,一轮比较下来,最大的元素就会“冒泡”到数组的末尾。
重复这个过程,直到没有需要交换的元素为止,排序完成。
public class Demo02Bubble {
public static void main(String[] args) {
int[] arr={5,4,3,2,1};
//第一圈
for (int i = 0; i < arr.length-1; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
//第二圈
for (int i = 0; i < arr.length-1-1; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
//第三圈
for (int i = 0; i < arr.length-1-2; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
//第四圈
for (int i = 0; i < arr.length-1-3; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" " );
}
}
}
public class Demo02Bubble {
public static void main(String[] args) {
int[] arr={5,4,3,2,1};
/*
* 外层循环比较了几圈
* n-1圈
*
* 内层循环代表每一圈比较的次数
* 每圈都少比一次
*
*
* */
for (int j = 0; j < arr.length-1; j++) {
for (int i = 0; i < arr.length-1-j; i++) {
if (arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" " );
}
}
}
三、二分查找
前提:数组中的数据必须是有序的
查询思想:
老式查询:遍历数组,一个一个比较,查询效率慢
二分查找:每次找中间索引对应的元素进行比较查询(每次查询少一半数据)
public class Demo03Binary {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7,8,9};
int index=binary(arr,6);
System.out.println(index);
}
public static int binary(int[] arr,int data){
//定义三个变量
int min=0;
int max=arr.length-1;
int mid=0;
//查找
while (min<=max){
mid=(min+max)/2;
if (data>arr[mid]){
min=mid+1;
}else if(data<arr[mid]){
max=mid-1;
}else {
return mid;
}
}
return -1;
}
}
四、对象数组
存储的是对象,取出来还是对象
public class Demo01ObjectArray {
public static void main(String[] args) {
/*
*
* Person person=new Person();
*
*
* 1.定义一个存储int型数组:int[]
* 2.定义一个Person型数组:Person[]
*
* */
//定义数组
Person[] arr=new Person[3];
//创建三个对象
Person p1=new Person("杨",18);
Person p2=new Person("名",18);
Person p3=new Person("怡",18);
//将三个对象保存到数组中
arr[0]=p1;
arr[1]=p2;
arr[2]=p3;
for (int i = 0; i < arr.length; i++) {
Person p=arr[i];
System.out.println(arr[i].getName()+".."+arr[i].getAge());
}
}
}
如有不足,请大佬多多指教