冒泡排序
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
升序排列:
//从前向后遍历
//相邻两数比较,不满足顺序就交换
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++){//a.length-1 防止数组越界 a.length-1-i 每次确定的最大值不需要再比较了
if (a[j]>a[j+1]){
isChanged=true;
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
if (!isChanged){//判断是否交换
System.out.println("数组已经有序不需要继续比较");
break;
}
}
System.out.println(Arrays.toString(a));
外层循环:控制比较多少轮 5个数字比较4轮
内层循环:控制每轮比较多少次
交换数据
使用Arrays为数组排序
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));
Arrays.sort(a);//升序
System.out.println(Arrays.toString(a));
int[] b=Arrays.copyOf(a,10);//复制
System.out.println(Arrays.toString(b));
System.out.println(Arrays.equals(a, b));//数组的比较
System.out.println(a==b);//比较内存地址
int[] c= new int[10];
Arrays.fill(c,10);//将数组元素都赋值为10
System.out.println(Arrays.toString(c));
查找
int[] a={10,20,30,40,50,60,70,80,90};
int num=59;
int i =Arrays.binarySearch(a,num);
System.out.println(i);//负数没找到
Arrays.binarySearch(a,0,6,num);//区间是[0,6)范围内查找
二分查找
int[] a={10,20,30,40,50,60,70,80,90};
int num=20;
//二分法查找 前提是有顺序
//1、定义头位置定义尾位置
// 2、定义中间位置,与输入的数字进行比较
//3、如果比中间数大,头会变成中间位置+1
//4、如果比中间数小,尾部变成中间位置-1
//5、如果只有一个元素,比完就结束了
//6、只要找到就立刻结束
int start=0;
int end=a.length-1;
while(start<=end) {
//如果只有一个元素
if (end==start){
if (a[start]==num){
System.out.println("在下标为"+end+"的位置找到"+num);
break;
}else {
System.out.println("没有这个元素");
System.exit(1);
}
}
int mid=(start+end)/2;
if (a[mid]>num){
end=mid-1;
}else if (a[mid]<num){
start=mid+1;
}else {
System.out.println("在下标为"+mid+"的位置找到"+num);
break;
}
}
二维数组
int[][] scores; //定义二维数组
scores=new int[5][50]; //分配内存空间
//或者
int [ ][ ] scores = new int[5][50];
int [ ][ ] scores = new int[2][];
如果写成这样,需要对每个一维数组重新定义
scores[1]=new int[3];
scores[0]=new int[2];
二维数组实际上是一个以一维数组做为元素的一维数组
//5个班5个成绩
int[][] a =new int[5][5];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
a[i][j]=(int)(Math.random()*100);
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(Arrays.toString(a[i]));
System.out.println();
}