二维数组
冒泡排序
实现数字升序:
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
举例:
public class Demo1 {
public static void main(String[] args) {
int[] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length-1; i++) {
boolean isChanged=false;
for (int j = 0; j < a.length-1-i; j++) {
if (a[j]>a[j+1]){
isChanged=true;
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
if (!isChanged){
System.out.println("已经有序,不需要继续比较");
break;
}
}
System.out.println(Arrays.toString(a));
}
}
结果如图:
图中的随机数组用冒泡排序变成了升序数组,思想就是1、数组从前向后遍历2、相邻两数比较,不满足顺序则交换。这是一种非常简单的排序方法。
Arrays类
我们还可以使用Arrays为数组排序,这就需要使用java.util.Arrays类。这是java.util包提供的工具类,Arrays类提供操作数组的方法,如:排序、查询。Arrays类的sort()方法: 对数组进行升序排列。
方法名称 | 说明 |
---|---|
boolean equals(array1,array2) | 比较array1和array2两个数组是否相等 |
sort(array) | 对数组array的元素进行升序排列 |
String toString(array) | 将一个数组array转换成一个字符串 |
void fill(array,val) | 把数组array所有元素都赋值为val |
copyOf(array,length) | 把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致 |
int binarySearch(array, val) | 查询元素值val在数组array中的下标(要求数组中元素已经按升序排列) |
多维数组
三维及以上的数组很少使用
主要使用二维数组
从语法上Java支持多维数组
从内存分配原理的角度讲,只有一维数组
二维数组的语法:<数据类型> [ ][ ] 数组名; 或者 <数据类型> 数组名 [ ][ ];
定义二维数组时,要定义最大维数。二维数组实际上是一个以一维数组做为元素的一维数组。
二维数组的定义与赋值:int scores[][] = {{ 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 } };(这个方法不常用)
举例:二分法查找
public class Demo5 {
public static void main(String[] args) {
int[] a={10,20,30,40,50,60,70,80,90};
int num=20;
int s=0;
int e=a.length-1;
for (; s<= e;) {
if (e==s){
if (a[s]==num){
System.out.println("在下标为"+s+"的位置找到"+num);
break;
}else {
System.out.println("没有这个元素");
System.exit(-1);
}
}
int mid=(s+e)/2;
if (a[mid]>num){
e=mid-1;
}else if (a[mid]<num){
s=mid+1;
}else {
System.out.println("在下标为"+mid+"的位置找到"+num);
break;
}
}
}
}
结果如图:
二分法查找
1、定义头位置,定义尾位置
2、定义中间位置,与输入的数进行比较
3、如果比中间的数大,头会变成中间位置+1
4、如果比中间的数小,尾会变成中间位置-1
5、如果只有一个元素,比完就结束了
6、只要找到就立刻结束