递归头:什么时候不调用自身。如果没有头,将陷入死循环。
递归尾:什么时候需要调用自身方法
package com.method;
public class Domn06 {
//阶乘 2!
public static void main(String[] args) {
System.out.println(f(10));
}
//递归 2!=2*f(1) 类似于函数
public static int f(int n){
if (n==1){
return 1;
}else {
return n*f(n-1);
}
}
}
数组的四个基本特点
-
其长度是确定的,数组一旦被创造,它的大小就是固定的
-
其元素必须是相同类型,不允许出现混合类型
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型
-
数组变量属于引用变量,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象是在堆中的,一次数组无论保存原始类型还是其他对象类型
数组的边界
-
下标的合法区间【0,length-1】
小结:
-
-
数组长度是确定的,不可变得
冒泡排序
package com.array;
import java.util.Arrays;
public class ArrayDomn07 {
public static void main(String[] args) {
int[] a={1,5,64,65,464,6464,6464,6464,6464};
int[] sort=sort(a);
System.out.println(Arrays.toString(sort));
}
//冒泡排序
//1.比较数组中,两个相邻的元素,如果第一个数比第二个大,我们就交换他们的位置
//2.每一次比较,都会产生出一个最大,或者最小的数字
//3.下一轮则可以少一次排序
//4.一次循环,知道结束
public static int[] sort(int[] array) {
int temp=0;//临时变量
boolean flag=false;//通过flag标识位减少没有意义的比较
//外层循环,比较判断两个数,如果第一个数比第二个数大,则交换位置
for (int i = 0; i <array.length ; i++) {
//内层循环,比
for (int j = 0; j <array.length-1-i ; j++) {
if (array[j+1]<array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=true;
}
}
if (flag==false){
break;
}
}
return array;
}
}
稀疏数组
package com.array;
public class ArrayDomn08 {
public static void main(String[] args) {
int[][] array1=new int[11][11];
array1[1][2]=1;
array1[2][3]=1;
System.out.println("输出原始数组");
for (int[] ints : array1){
for (int anInt : ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
int sum=0;
for (int i = 0; i <11 ; i++) {
for (int j = 0; j <11 ; j++) {
if (array1[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数: "+sum);
//
int[][] array2=new int[sum+1][3];
array2[0][0] =11;
array2[0][1] =11;
array2[0][2] =sum;
int count=0;
for (int i = 0; i <array1.length ; i++) {
for (int j = 0; j <array1[i].length ; j++) {
if (array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
}
}
}
System.out.println("稀疏数组");
for (int i = 0; i <array2.length ; i++) {
System.out.println(array2[i][0]+"\t"
+array2[i][1]+"\t"
+array2[i][2]+"\t");
}
System.out.println("=======================");
System.out.println("还原");
int[][] array3= new int[array2[0][0]][array2[0][1]];
for (int i = 1; i <array2.length ; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
System.out.println("输出还原数组");
for (int[] ints : array3){
for (int anInt : ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}