九、一维数组、冒泡排序、二分法查找
1、一维数组的内存分析:
数组含义:
1)数组是一种引用类型
2)数组是一种简单的数据结构,线性的结构
3)数组是一个容器,可以用来存储任意数据类型的元素
4)数组分为:一维数组,二维数组,三维数组,多维数组
5)数组中存储的元素类型是统一的
6)数组长度不可改变,即数组一旦创建数组的长度是不可以改变的,是固定的
数组中存储元素的类型是统一的,每一个元素在内存中所占的空间大小是相同的,知道数组的首元素的内部地址,要查找的元素只要知道下标就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就可以快速计算出要查找元素的内存地址,通过内存地址快速定位该元素,所以数组查找元素的效率较高。
随机的对数组进行增删元素,当增加的元素的时候,为了保证数组中元素在空间存储上是有序的,所以被加元素位置后面的所有元素都要向后移动,删除元素也是,后面所有的元素要向前移动,所以数组的增删元素的效率很低。
2、二维数组:
二维数组是一个特殊的一维数组,特殊在这个一维数组中每个元素都是“一维数组”
3、冒泡排序:
是只要发生比较就交换顺序,效率比较低。从小到大排序,如果前面的数字比后面的数字大的话就交换一下顺序;
|示例|
public class MaoPaoPaixu {
public static void main(String[] args) {
int [] a={3,6,2,7,1};
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(a[j]>a[j+1]){
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
4、二分法查找/折半查找
二分法查找是建立在已经排序的基础上的,并且该数组中没有重复的元素
public class ErFenFa {
public static void main(String[] args) {
int[] a={1,3,4,5,7,9,10,23,25,29};
int destElement=10;
int index= binarySearch(a,destElement);
System.out.println((index==1)?destElement+"元素不存在":"在数组中的下标是:"+index);
}
//二分法查找的核心算法
public static int binarySearch(int[] a,int destElement){
int begin=0;
int end=a.length-1;
while(begin<=end){
int mid=(begin+end)/2;
if(a[mid]==destElement){
return mid;
}else if(a[mid]>destElement){
end=mid-1;
}else if(a[mid]<destElement){
begin=mid+1;
}
}
return -1;
}
}
备注:用Arrays类中的sort() 方法和binarySearch()方法对int类型的数据进行排序和二分法查找
|示例|
public class ArraysTest {
public static void main(String[] args) {
int [] a={3,1,6,2,5};
Arrays.sort(a);//按照升序进行排列
for(int i=0;i<a.length;i++){
System.out.print(a[i]);
}
//对升序之后的数据进行二分法查找
int index=Arrays.binarySearch(a, 6);
System.out.println("目标值的下标是"+index);
}
}