您的位置:首页 > 编程语言 > Java开发

Java数组与排序问题

2017-06-17 14:46 232 查看

数组

Java中包括基本类型和对象类型,其中数组属于对象类型。(虽然在C++中数组也是基本类型)

int[] a;
a=new int[100];
//int[] a=new int[100]


数组存储在其他的地址中,a中指保存内个地址。

数组一旦创建,大小不会改变。初始化为空null,当我们尝试访问含有null数组数据项时,会得到空指针报错。

数组可以按照无须数组和有序数组来进行分别学习。

算法时间复杂度
线性查找O(N)(还可以)
二分查找O(logN)(良好)
无序数组的插入O(1)(优秀)
有序(无序)数组的删除O(N)
有序数组的删除O(N)

简单排序

冒泡排序

public void bubleSort(){
int out,in;
for(out=n-1;out>1;out--){
for(in=0;in<out;in++){
if(a[in]>a[in+1])
swap(in,in+1);
}
}
}//end
private void swap(int m,int n){
long temp=a[m];
a[m]=a
;
a
=temp;
}


思路:数组由小到大进行排序,每次将两个相邻的数据进行比较,将大的那个放在右边,整一套下来,保证了最大的在最右边。也就是说内部的in的循环结束后,下标大于out的数据项已经排好。

时间复杂度:O(N^2),可以说是相当慢了

选择排序

public void selectionSort(){
int out,in,min;
for(out=0;out<n-1;out++){
min=out;
for(in=out+1;in<n;in++){
if(a[in]<a[min]) min=in;
swap(out,min);//swap()函数同上,实际交换的是引用的位置
}
}
}//end


不同于冒泡排序中数组下标大于out的总是有序的,在选择排序中,数组下标小于in的总是有序的。

选择排序中,进行的比较次数和冒泡排序中的一样多,但是交换次数只有O(N),但是我们认为N值很大时,时间复杂度依然是O(N^2)。但是选择排序会比冒泡排序要快很多啦。

- 插入排序

public void insertionSort(){
int in,out;
for(out=1;out<n;out++){
long temp=a[out];
in=out;
while(in>0&&a[in-1]>temp){
a[in]=a[in-1];
--in;
}
a[in]=temp;
}
}


每一趟之后,比out下标小的总是有序的。out标记了未排序部分的最左端数据,in从out变量向左移动,直到temp值小于in所指的数组数据项。

适用于基本有序的数组。

tips:

复制是交换的三倍

在插入排序中,一个数据项被插入到局部有序的组合后,他将永远不会向左边移动。

稳定性是指在对州进行排序时,每个周的城市还要求按照人口递增排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java