概述
一维数组的排序及二维数组
一 . 数组的三个简单排序:
1.冒泡排序:
public static void bubbleSort(int[] array) {
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++) {
if(array[j]>array[j+1]){
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
最坏的情况就是两个for循环都执行完毕,时间复杂度为O(n^2);
public static void bubbleSort(int[] array) {
int tmp = 0;
boolean swap = false;
for(int i = 0;i < array.length-1;i++) {
for(int j = 0;j < array.length-1-i;j++) {
if(array[j] > array[j+1]) {
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
swap = true;
}
}
if(!swap) {
break;
}
}
}
这是优化的排序算法,可以看出,如果有序数组的话,它只执行一次for循环就结束了;
即最好的情况是这个数组本来就是有序数组(从小到大),时间复杂度:O(n);
稳定性:稳定
2.直接插入排序
public static void insertSort(int[] array) {
for(int i=1;i<array.length;i++) {
int tmp=array[i];
int j=0;
for(j=i-1;j>=0;j--){
if(tmp<array[j]){
array[j+1]=array[j];
}else{
break;
}
}
array[j+1]=tmp;
if(!swap) {
break;
}
}
}
最坏的情况就是两个for循环都执行完毕,时间复杂度为O(n^2);
public static void insertSort(int[] array) {
boolean swap = false;
for(int i=1;i<array.length;i++) {
int tmp=array[i];
int j=0;
for(j=i-1;j>=0;j--){
if(tmp<array[j]){
array[j+1]=array[j];
swap = true;
}else{
break;
}
}
array[j+1]=tmp;
}
}
这是优化的排序算法,可以看出,如果有序数组的话,它只执行一次for循环就结束了;
即最好的情况是这个数组本来就是有序数组(从小到大),时间复杂度:O(n);
稳定性:稳定
3.选择排序
public static void chooseSort(int[] array) {
for (int i=0;i<array.length;i++) {
for(int j=i+1;j<array.length;j++) {
if(array[j]<array[i]){
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
}
时间复杂度O(n);
稳定性:不稳定;
二. 二维数组
1.在C语音中,数组的理解是这样的:
2.在Java中 数组的理解是:
它并不是一个i行j列的一个表;这点要额外注意;
在一维数组中,详细写了四个数组拷贝,二维数组也不例外,for()循环,Object.clone(),Arrays.copyOf(),System.Arraycopy()的基本数据类型都为深拷贝,引用数据类型都为浅拷贝;
for循环:
for (int i=0;i<array.length;i++) {
for (int j=0;j<array[i].length;j++){
brray[i][j]=array[i][j];
}
}
如果是引用数据类型
TestArray[][] t1=new TestArray[2][2];
t1[0][0]=new TestArray();
t1[0][1]=new TestArray();
t1[1][0]=new TestArray();
t1[1][1]=new TestArray();
TestArray[][]t2=new TestArray[2][2];
for(int i=0;i<t1.length;i++) {
for (int j=0;j<t1[i].length;j++){
t2[i][j]=t1[i][j];
}
}
同样的:
TestArray[][] t1=new TestArray[2][2];
t1[0][0]=new TestArray();
t1[0][1]=new TestArray();
t1[1][0]=new TestArray();
t1[1][1]=new TestArray();
TestArray[][]t2=new TestArray[2][2];
for(int i=0;i<t1.length;i++){
t2[i]=t1[i].clone();
}
TestArray[][] t1=new TestArray[2][2];
t1[0][0]=new TestArray();
t1[0][1]=new TestArray();
t1[1][0]=new TestArray();
t1[1][1]=new TestArray();
TestArray[][]t2=new TestArray[2][2];
for(int i=0;i<t1.length;i++){
t2[i]=Arrays.copyOf(t1[i],t1[i].length);
}
TestArray[][] t1=new TestArray[2][2];
t1[0][0]=new TestArray();
t1[0][1]=new TestArray();
t1[1][0]=new TestArray();
t1[1][1]=new TestArray();
TestArray[][]t2=new TestArray[2][2];
for(int i=0;i<t1.length;i++){
System.arraycopy(t1[i],0,t2[i],0,t1.length);
}
可以看出,二维数组的拷贝,其实可以看成一个for循环里嵌套了一个一维数组的拷贝;
最后
以上就是认真天空为你收集整理的一维数组的排序及二维数组的全部内容,希望文章能够帮你解决一维数组的排序及二维数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复