Java基础之数组

一、数组拷贝

System类中有一个静态方法:

public static void arraycopy(Object src,int srcPos,Pbject dest,int destPos,int length){
};

参数解释:

src:源数组

srcPos:源数组起始位置

dest:目标数组

destPos:目标数组的起始位置

length:拷贝的数组元素的个数

package copy;

public class ArrayCopy {

	public static void main(String[] args) {
		int[] a = {1,2,3,4,5,6,7,8,9};
		int[] b = {12,23,34,45,56,67,78,89,90};
		System.arraycopy(a,1,b,4,3);
		System.out.println("复制后的数组:");
		for (int i = 0; i < b.length; i++) {
			System.out.print(b[i] + " ");
		}
	}

}

运行结果:

复制后的数组:

12 23 34 45 2 3 4 89 90 

       本实例是从a数组的下标为1即第二个元素开始,复制3个元素的长度,复制到从b数组下标为4即第五个元素开始长度为3的位置。


二、排序算法

1、冒泡排序

       共有n个数据,则需要进行n-1趟排序(可优化),每一趟排序都会通过“两两交换”的方式对数据进行比较,每一趟排序后都会将本趟排序的最大值“冒”到后面。

实例:将数组12,52,45,32,1,85,22进行冒泡排序

package sort;

public class BubbleSort {

	public static void main(String[] args) {
		int[] a = {12,52,45,32,1,85,22};
		bubbleSort(a);
	}

	public static void bubbleSort(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {//外层循环控制趟数
			//j变量是数组的索引(下标),j控制着当前趟的“两两比较”的次数
			for (int j = 0; j < a.length - i -1; j++) {
				if(a[j] > a[j+1]) {
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
		System.out.println("排序后的数组:");
		for(int i = 0; i < a.length;i++) {
			System.out.print(a[i] + " ");
		}
	}
}

运行结果:
排序后的数组:
1 12 22 32 45 52 85 


2、插入排序

对一个有n个元素的数据序列,排序需要进行n-1趟插入操作。

第一趟插入将第2个元素插入前面的有序子序列(此时前面只有一个元素);

第二趟插入将第3个元素插入前面的有序子序列,前面两个元素是有序的;

第n-1趟插入将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。

实例:将数组98,23,45,56,41,32,78,63,21使用插入排序进行排序

package sort;

public class InsertSort {

	public static void main(String[] args) {
		int[] a = {98,23,45,56,41,32,78,63,21};
		insertSort(a);
		System.out.println("排序后的结果:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
	}

	public static void insertSort(int[] a) {
		for (int i = 1; i <= a.length - 1; i++) {
			int data = a[i];//当前“指示灯数据”,保存当前位置i的元素,其中[0,i-1]已经有序
			int j = i - 1;//使用j变量记录“指示灯数据”的前一个数据的索引
			while(j >= 0 && data < a[j]) {
				a[j + 1] = a[j];//后移“指示灯”数据前面的数据
				j--;
			}
			a[j+1] = data;//插入到合适的位置
		}
	}
}

运行结果:

排序后的结果:
21 23 32 41 45 56 63 78 98 


3、快速排序

      从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所有比它大的数据元素放到它的右边;接下来,对左右两个子序列按照上述方法进行递归排序,直到排序完成。

实例:将数组42,12,32,42,22,98,52使用快速排序进行排序

package sort;

public class QuickSort {
	public static void main(String[] args) {
		int[] a = {42,12,32,42,22,98,52};
		quickSort(a,0,a.length-1);
		System.out.println("使用快速排序的结果是:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
	}
	
	public static void quickSort(int[] array, int start,int end) {
		if(start >= end) {
			return;//结束方法
		}
		int data = array[start];//将起始索引执行的值作为“分界值”
		int i = start + 1;//记录向右移动的位置
		int j = end;//记录向左移动的位置
		while(true) {
			while((i <= end) && (array[i] < data)) {
				i++;//索引右移
			}
			while((j >= start + 1) && (array[j] > data)) {
				j--;//索引左移
			}
			if(j > i) {
				int temp = array[i];
				array[i] = array[j];
				array[j] = temp;
			}else {
				break;
			}
		}
		array[start] = array[j];
		array[j] = data;
		quickSort(array,start,j-1);//递归调用,完成“分界值”左边的排序
		quickSort(array,j+1,end);//递归调用,完成“分界值”右边的排序
	}
}

运行结果:

使用快速排序的结果是:
12 22 32 42 42 52 98 


三、二维数组

二位数组的声明与实例化:

数据类型[][]   数组名 = new  数据类型[行的个数][列的个数];

注意:二维数组的length属性就是它所包含的"行的个数"

二维数组访问具体元素的语法:数组名称[行的索引][列的索引]

二位数组的静态初始化

数据类型[][]   数组名称={

         {元素1,元素2,...},

         {元素1,元素2,...},

         ...

};

实例1:

package twoarray;

public class TwoArrayDemo {
	public static void main(String[] args) {
		String[][] array = new String[4][3];
		array[0][0] = "孙悟空";
		array[0][1] = "猪八戒";
		array[0][2] = "沙和尚";
		array[1][0] = "郭靖";
		array[1][1] = "黄蓉";
		array[2][0] = "杨过";
		array[2][1] = "小龙女";
		array[3][2] = "扫地僧";
		for (int i = 0; i < array.length; i++) {//循环行
			for (int j = 0; j < array[i].length; j++) {//循环当前行(一维数组)的数据
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}
	}
}

运行结果:

孙悟空 猪八戒 沙和尚
郭靖 黄蓉 null
杨过 小龙女 null
null null 扫地僧

实例2:

package twoarray;

public class InitTwoArray {
	public static void main(String[] args) {
		String[][] array = {
				{"Apple","Orange","Banana"},
				{"Dog","Cat","Pig"},
				{"Phone","Java","Book","Light"}
		};
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				System.out.print(array[i][j] + "\t");
			}
			System.out.println();
		}
	}
}

运行结果:

Apple Orange Banana
Dog Cat Pig
Phone Java Book Light

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值