java学习(5)-二维数组以及排序算法

来源:互联网 发布:数据覆盖了能恢复吗 编辑:程序博客网 时间:2024/06/04 18:07

java学习(5)

声明:由于学习是使用JDK7,所有关于java学习所提供的代码段在JDK7环境下均经过测试,没有问题,如何环境不同,可能会有报错!!!

之前已经说过关于一维数组的问题了,这篇从二维数组以及两种排序算法来写。

【最近在对于写过的代码进行整理总结,后续还会对于一些代码段进行梳理】


1. 二维数组:其实二维数组其实就是一个元素为一维数组的数组。

类似于一维数组,二维数组也有动态和静态两种初始化方法  
1.1 动态初始化方式一(指定有多少个长度相同的一维数组):
数据类型[][] 变量名 = new 数据类型[m][n];
代码示例:

//请定义一个二维数组,二维数组有4个一维数组,每个一维数组有3个元素

int [][] arr = new int[4][3];
1.2 动态初始化方式二(指定二维数组中有多少个一维数组,每一个一维数组的长度不固定):
数据类型[][] 变量名 = new 数据类型[m][];
代码示例:

int[][] arr = new int[3][];
arr[0]= new int[2];
arr[1]= new int[3];
arr[2]= new int[1];

这里刚开始就定义了一个二维数组,动态初始化的指定为3个一维数组,但是并没有指定每个一维数组的长度,
也就是说一维数组的长度不固定。

注意:m这个数据必须给出,就是必须指定一维数组的个数,以便开辟内存空间,后面的数据可以不给
1.3 二维数组的静态初始化:
静态初始化:
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化格式:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

代码示例:

//定义一个里面有4个长度一样的一维数组的二维数组
int [][] arr1 = {{2,1,3},{4,32,2},{4,2,1}
,{1,4,5,7}};
//定义一个里面有
4个长度不一样的一维数组的二维数组
int [][] arr2 = {{2,1},{4,32,2},{4,2,1,32}
,{4,5}}; 

这里使用静态初始化的简化方法,分别定义了4个长度一样的一维数组的二维数组4个长度不一样的一维数组的二维数组

1.4 二维数组的遍历。简单来说,对于二维数组的遍历,我的理解可以说成是分别对于每一个一维数组的遍历,这样感觉更加容易理解和记忆,因此用两个for循环嵌套就可以简单的搞定了。外层循环来控制一维数组的索引,内层循环对于某个一维数组进行遍历就可以了。

代码示例:

//定义一个4个长度不样的一位数组的二维数组,并遍历
int[][] arr = {{1
,3,1},{3,2},{4,1,5,2},{78,152,4}};
//for循环进行遍历
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}

运行结果:


一个简单的二维数组遍历就写完了。

2. 形式参数问题
2.1 如果形式参数是基本类型,即之前说过的四类八种byte,short,int,long,char,float,double,boolean,这些传递的的值,形式参数的改变,不影响实际参数。

代码示例:

public static void main(String[] args) {
int a = 15;
int b = 25;
System.out.println("a:"+a+" "+"b:"+b);
add(a,b);
System.out.println("a:"+a+" "+"b:"+b);
}
private static void add(int a, int b) {
a+=5;
b++;
System.out.println(a+b);
System.out.println("a:"+a+" "+"b:"+b);
}

运行结果:


可以看出来基本数据类型经过传值计算后,本身的值并没有发生改变。

2.2 如果形式参数是引用类型,传递的是指向的地址,形式参数的该变,直接影响实际参数。

代码示例:

public static void main(String[] args) {
int[] arr = {32,12,123};
System.out.println("输出一次数组元素:");
printArray(arr);
sub(arr);
System.out.println("最后输出一次数组元素:");
printArray(arr);
}
//定义遍历数组方法
private static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
//定义测试方法
private static void sub(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]-=i;
}
System.out.println("进行操作后输出数组元素:");
printArray(arr);
}

运行结果:


通过两段代码可以很容易看出二者之间的区别。

3. 数组的高级操作
3.1 冒泡排序:相邻的两个元素进行比较,小的放前面,大的放后面

简单的来说,冒泡排序就是对n个无序数字进行的排序算法,总共进行n-1趟排序,每趟都把依次大的值放到数组从最后面依次向前的位置上,n-i趟后,数组就变得有序了,这里给出一个自己写的代码示例:

public static void main(String[] args) {

//创建一维数组
int[] arr = {45,1,21,14,45,54,57};
//用冒泡排序进行排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j+1]<arr[j]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//调用方法进行遍历
printArray(arr);
}
//定义遍历方法
private static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}

这是一个java代码实现的冒泡排序算法,还有一个写好的遍历数组方法,测试没有问题,其实并不是太难去实现,主要把握好循环的写法。外层循环来控制次数,内层循环来控制逻辑。

运行结果:



3.2 选择排序
 选择排序:和冒泡算法刚刚相反,从最小索引开始去和其他值进行比较,依次把小的值放到索引依次小的位置。

示例代码:

public static void main(String[] args) {

//使用选择排序对数组进行排序:int[] arr = { 24, 69, 80, 57, 13 };
int[] arr = { 24, 69, 80, 57, 13 };
//for循环进行选择排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[j]<arr[i]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//调用方法进行遍历
printArray(arr);

这里是一个选择排序的实现代码,调用上面的那个一的遍历方法printArray()进行遍历。

运行结果:



4. Arrays数组工具类:针对数组进行操作的工具类。提供了排序,转换等功能。
成员方法:
public static String toString(int[] a):把数组转成字符串
public static void sort(int[] a):对数组进行排序(有重载)

Arrays数组工具类能够极大的简化我们的代码,上面所写的两种算法代码以及遍历方法,都可以使用Arrays数组工具类简单又快捷的实现,仅仅是调用以下两个成员方法。

代码示例:

//public static String toString(int[] a):把数组转成字符串
int[] arr = {12,32,24,12,412,32};
String str = Arrays.toString(arr);
System.out.println(str);

//public static void sort(int[] a):对数组进行排序(有重载)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

第一段代码就是利用了toString方法进行了数组遍历;第二段利用sort方法进行排序并利用toString方法遍历,代码特别简单。

运行结果:


1 0
原创粉丝点击