1.二维数组




java 二维数组去重 java二维数组赋值_排序算法


java 二维数组去重 java二维数组赋值_数组_02


java 二维数组去重 java二维数组赋值_排序算法_03


打印二维数组的外层数组,其实相当于打印一个一维数组,只会打印出这个数组存放的地址。其中“[I@15db...”的‘[’表示一维,‘I’ 表示int型。

倒数第二行为null,即使二维数组是double,但里面的元素数组还未定义类型,而数组的为初始化为null。报错是因为未初始化就取值会报错。

2.数组的赋值与复制

(1)数组的赋值:

慎用array1 = array2 来赋值,虽然把array2 赋值给array1,但修改array1同样修改的是array2,只是将array2的地址给了array1,他俩共用一个数组。

(2)数组的复制:

开辟一个新的堆,存放新数组

array1 = new int[array2.length]; 
for(int i = 0;i < array1.length;i++){ 
array1[i] = array2[i]; 
}

3.打印数组

将数组转成String:Arrays.toString()

System.out.println("等级" + Arrays.toString(abcd));

4.数组算法

(1)衡量排序算法的优劣

1.时间复杂度:分析关键字的比较次数和记录的移动次数

2.空间复杂度:分析排序算法中需要多少辅助内存

3.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。

(2)排序算法分类

内部排序和外部排序。

内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。

外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。

(3)十大内部排序算法

a选择排序

直接选择排序、堆排序

b交换排序

冒泡排序、快速排序

c插入排序

直接插入排序、折半插入排序、Shell排序

d归并排序

e桶式排序

f基数排序

(3)冒泡排序

介绍:

冒泡排序的原理非常简单,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

排序思想:

1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。

2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3. 针对所有的元素重复以上的步骤,除了最后一个。

4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。

(4)快速排序

介绍:

快速排序通常明显比同为O(nlogn)的其他算法更快,因此常被采用,而且快排采用了分治法的思想,所以在很多笔试面试中能经常看到快排的影子。可见掌握快排的重要性。

快速排序(Quick Sort)由图灵奖获得者Tony Hoare发明,被列为20世纪十大算法之一,是迄今为止所有内排序算法中速度最快的一种。冒泡排序的升级版,交换排序的一种。快速排序的时间复杂度为O(nlog(n))。

排序思想:

1. 从数列中挑出一个元素,称为"基准"(pivot),

2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

4. 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。