例题
1.插入一个元素
2.找出最大值以及最小值
3.合并数组
4.填充
5.删除数
6.字符串的输出
public class TestDemo1 {
//插入元素
public static int[] Insert(int[] array,int val,int index) {
int[] array2 = new int[array.length+1];//定义一个新的数组array2比array的长度多1
System.arraycopy(array, 0, array2, 0, index);//把array复制给array2
array2[index] = val; //插入一个值
System.arraycopy(array, index, array2, index+1, array.length-index);
return array2;
}
//找出最大最小值
public static void MaxAndMin(int[] array){
int max = array[0];
int min = array[0];
for(int i =0;i<array.length;i++){
if(max<array[i]){
max = array[i];
}
if(min>array[i]){
min = array[i];
}
}
System.out.println("Max:"+max);
System.out.println("Min:"+min);
}
//合并数组
public static void MergeArray(int[] array,int[] array2){
int[] array3 = new int[array.length+array2.length];
//把array给array3
for(int i = 0;i<array.length;i++){
array3[i] = array[i];
}
//把array2给array3(在array之后)
for(int j = 0;j<array2.length;j++){
array3[j+array.length] = array2[j];
}
System.out.println(Arrays.toString(array3));
}
//填充
public static void fill(){
int[] array = new int[8];
Arrays.fill(array, 10);//全部填充
System.out.println(Arrays.toString(array));
Arrays.fill(array, 0,3,100);//局部填充
System.out.println(Arrays.toString(array));
}
//删除元素
public static int serach(int[] array,int val){
for(int i=0;i<array.length;i++){
if(array[i] ==val){
return i;
}
}
return -1;
}
public static void delete(int[] array,int val){
int index = serach(array,val);
if(index == -1){
return;
}
for(int i=index;i<array.length-1;i++){
array[i] = array [i+1];
System.out.println(array[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {11,2,32,14,5};
int[] array2 = {111,222,322,144,55};
//排序
Arrays.sort(array);
//求最大最小值
MaxAndMin(array);
//指定插入
int[] array6 = Insert(array,4,0);
System.out.println(Arrays.toString(array6));
//输出长度
int[][] array3 = {{1,2,3},{2,3,4,5,6}};
System.out.println(array3.length);
System.out.println(array3[0].length);
System.out.println(array3[1].length);
//输出字符串的两种形式(循环)
String[] string = new String[3];
string[0] = "tulun";
string[1] = "in";
string[2] = "kulala";
for(int i =0;i<string.length;i++){
System.out.println(string[i]);
}
for(String str:string){
System.out.println(str);
}
//填充(全部填充和部分填充)
fill();
//合并数组
int[] array4 = {1,2,3,4,5,6};
int[] array5 = {7,8,9,10,11,12};
MergeArray(array4,array5);
//System.out.println(Arrays.equals(array4, array5));
}
}
递归
汉诺塔
public class TestDemo2 {
//10--->12---->14---->16
public static int age(int n){
int tmp = 10;
for(int i =0;i<=n;i++){
tmp = tmp+2;
}
return tmp;
}
public static int age2(int n){
int tmp = 0;
if(n == 1){
tmp = 10;
return tmp;
}else{
tmp = age2(n-1)+2;
return tmp;
}
}
public static int fac(int n){
int tmp = 0;
if(n == 1){
tmp = 1;
return tmp;
}else{
tmp = fac(n-1)*n;
return tmp;
}
}
//汉诺塔
public static void move(char pos1,char pos2){
System.out.println(pos1+"-->"+pos2);
}
public static void hanio(int n,char pos1,char pos2,char pos3){
if(n == 1){
move(pos1,pos3);
}else{
hanio(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanio(n-1,pos2,pos1,pos3);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
hanio(64,'A','B','C');
hanio(2,'A','B','C');
hanio(3,'A','B','C');
}
}
fabonic数列
public class TestDemo2 {
public static int fabonic(int n){
//System.out.println(System.currentTimeMillis());
int f1 = 1;
int f2 = 1;
int f3 = 1;
for(int i = 2;i < n;i++){
f3 = f1+f2;
f1 = f2;
f2 = f3;
}
//System.out.println(System.currentTimeMillis());
return f3;
}
//
public static int fabonic2(int n){
if(n == 0 || n == 1){
return 1;
}
return fabonic2(n-1)+fabonic2(n-2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(System.currentTimeMillis());
System.out.println(fabonic2(40));
System.out.println(System.currentTimeMillis());
}
}
fabonic2 为递归方法,一直调用前两项求和
static、final
public class TestDemo3 {
public static void fun(){
int data = 10;
data++;
System.out.println(data);
}
static int data2 = 0;
int data3 = 10;
public static void fun2(){
data2++;
System.out.println(data2);
}
public int a = 10; // 属于对象
public final int B = 20;//属于对象 编译期间可以确定 立即数
public static int c = 30;//方法区
public static final int D = 40; //方法区
int e = B+20;
public String str = "hello";//str属于对象 在堆中
public final String Str2 = "111";//Str2属于对象 "111"在常量池中
public static String str3 = "java";//方法区
public static final String STR4 = "baby";//方法区
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i =0;i<10;i++){
fun2();
}
TestDemo3 t1 = new TestDemo3();
String str3 = "helloworld";
String str = "hello";
String str2 = str+"world";
final String str4 = "hello";
String str5 = "hello"+"world";
System.out.println(str3 == str2);//运行结果为false
System.out.println(str3 == str5);//运行结果为true
}
}
直接插入排序
public class TestDemo4 {
public static void insrtSort(int[] array){
int tmp = 0;
int j;
for(int i = 1;i < array.length;i++){
tmp = array[i];//从i号位置开始进行比较
for(j = i-1;j >= 0;j--){
if(array[j] > tmp){
array[j+1] = array[j];
}else{//每次排序过后前面已经有序 找到第一个比tmp小的
break;
}
}
array[j+1] = tmp;// tmp小的 tmp 放到当前位置+1
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {12,3,43,65,6,7,8,4,9};
insrtSort(array);
System.out.println(Arrays.toString(array));
}
}
思想:
时间复杂度:O(n^2)
稳定性:不稳定
选择排序
public class TestDemo5 {
public static void selectSort(int[] array){
int tmp = 0;
int minIndex = 0;
for(int i = 0;i < array.length;i++){
minIndex = i;
for(int j = i+1;j < array.length;j++){
if(array[minIndex] > array[j]){
tmp = array[minIndex];
array[minIndex] = array[j];
array[j] = tmp;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {12,3,43,65,6,7,8,4,9};
selectSort(array);
System.out.println(Arrays.toString(array));
}
}
思想:
时间复杂度:O(n^2)
稳定性:不稳定