一、冒泡排序
每次比较相邻两数 小的交换在前面 每轮结束后最大的在交换到最后
1.把第一个元素与第二个元素比较,如果第一个比第二个大,则交换他们的位置。接着继续比较第二个与第三个元素,如果第二个比第三个大,则交换他们的位置….
2.我们对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样一趟比较交换下来之后,排在最右的元素就会是最大的数。(排序每走完一趟后面就会出一个最大的数,就会少一次交换 )
除去最右的元素,我们对剩余的元素做同样的工作,如此重复下去,直到排序完成。
口诀(升序)
N个数字来排队
两两相比小靠前
外层循环N-1
内层循环N-1-i
import java.util.Arrays;
/**
* @ Author: Qiutong
* @ Date: 2020/7/15
* @ Description:冒泡排序
*/
public class BubbleSort {
public static void main(String[] args) {
int[] a={23,42,85,96,75,61,42,15,28};
//定义循环次数
for (int i = 0; i < a.length-1; i++) {
//循环比较的过程
boolean ischange=false;
for (int j = 0; j <a.length-1-i; j++) {
if (a[j]<a[j+1]){
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
ischange=true;
}
}
System.out.println("经过"+(i+1)+"轮比较,数组变为");
System.out.println(Arrays.toString(a));
if(!ischange){//本轮没有任何交换
break;
}
}
System.out.println();
System.out.println(Arrays.toString(a));
}
}
二、二维数组
1.定义二维数组
int[][] a;//定义二维数组
a=new int[5][50];//分配内存空间
int[][] a=new int[5][50];
int[][] a=new int[5][];
int[][] a=new int[][];//只有这一种不可行
2.二维数组与内存
int [][] score = new int[3][5];
3.二维数组的赋值
写法一:
int[][] a={{96,85},{56,45},{12,23}}
写法二:
int a[][]={{96,85},{56,45},{12,23}}
import java.util.Arrays;
/**
* @ Author: Qiutong
* @ Date: 2020/7/15
* @ Description:二维数组赋值(随机数)和遍历
*/
public class Demo5 {
public static void main(String[] args) {
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.println(Arrays.toString(a[i]));
}
int total=0;
for (int i = 0; i < a.length; i++) {
int sum=0;
for (int j = 0; j < a.length; j++) {
sum+=a[i][j];
}
total+=sum;
System.out.println((i+1)+"班级的总分为:"+sum);
}
System.out.println("全年级的总分为:"+total);
}
}
4.二维数组的遍历
所为二维数组遍历,就是遍历一维数组,然后遍历一维数组的每个数据
常用方法:for for循环
拿百钱买百鸡举例
import java.util.Arrays;
/**
* @ Author: Qiutong
* @ Date: 2020/7/15
* @ Description:公鸡5 母鸡3 小鸡1/3 百钱买百鸡
*/
public class Test3 {
public static void main(String[] args) {
int[][] a=new int[100][3];
int i=0;
for (int cock = 0; cock <=20 ; cock++) {//外循环遍历有多少个一维数组
for (int hen = 0; hen <=33 ; hen++) {//内循环遍历每一个一维数组的元素
int chick=100-cock-hen;
if(5*cock+3*hen+chick/3==100 && chick%3==0){
a[i][0]=cock;
a[i][1]=hen;
a[i][2]=chick;
i++;
System.out.println("公鸡:"+cock+",母鸡:"+hen+",小鸡:"+chick);
}
}
}
int [][] rst;
rst= Arrays.copyOf(a,i);
for(int[] r:rst){
System.out.println(Arrays.toString(r));
}
}
}
三、使用Arrays类的各种方法
使用前加载 java.untin.Array包
Array.sort(数组名) 对数组里面的元素进行升序排序
注意:不能够对boolean类型的数组进行排序。
Arrays.binarySearch() 查找某个元素在数组中的位置(数组一定是升序排列的数组)
Arrays.toString() 将数组转为字符串
Arrays.equals方法比较两个数组是否相等(这两个数组同一个类型的)
如果两个数组相等返回值是true,否则返回值是false
两个数组相等的含义: (1)长度要相等 (2)数组中每个位上的元素值要相等
Arrays.fill(array,val) 把数组array所有元素都赋值为val
Arrays.copyOf 将原数组中的元素拷贝到新的数组中。
如果新的数组的长度大于原数组的长度,那么新数组中超出的元素的值是数组的默认值。
如果新的数组的长度小于原数组的长度,那么新数组中只保留对应位置上的元素值。