在看今天的重点二维数组前,先做俩个练习复习一下,热热脑子:
求数组内的最大值/最小值
这个就是挨个比较换一下位置
假设有这么一组数组{16,48,48,54,3}
public class Test01 {
public static void main(String[] args) {
int [] num = {16,48,54,3};
//用max接收数组第一个数据
int max=num[0];
//用循环挨个比较数组中的数据,遇到大的就换一下位置
for (int i=0; i< num.length; i++){
if (max<num[i]){
max = num[i];
}
}
System.out.println(max);
}
}
在数组中插入数据并排列
假如这里有一组排好的数据,要插入一个数据,并保持排序,分析一下: 获取到数据插入的位置(下标),后面的数据依次往后挪。
public class Test01 {
public static void main(String[] args) {
int [] num= new int[6];
num[0]=;132
num[1]=88;
num[2]=84;
num[3]=34;
num[4]=13;
/*//写的时候可以遍历一遍看看是否赋值成功
for (int nums:num){
System.out.println(nums);
}*/
//定义我们输入数据的下标
int index = 0;
Scanner input = new Scanner(System.in);
System.out.println("请输入添加数据");
int add = input.nextInt();
//判断我们输入的成绩所占的下标
for (int i=0; i<num.length; i++){
if (add>num[i]){
index =i;
//大于换位后立刻跳出,继续循环没有意义
break;
}
}
//让后面的值后退
for (int j= num.length-1; j>index; j--){
num[j] =num[j-1];
}
//把我们输入的数据放入数组
num[index]=add;
//遍历结果
for (int nums:num){
System.out.println(nums);
}
}
}
但我们想问题不能太局限,如果输入的的个负数会怎么样?
问题出现了,直接给它放到最上面,这是为啥,因为我们的判断输入数据所在下标的时候,add不大于任意数组内数据,所以它压根就插不进去,那咋整,在判断中严密逻辑即可
if (add>num[i]){
index =i;
//大于换位后立刻跳出,继续循环没有意义
break;
}else {
index=i;
**}**后面加一个else,i进行到最后一个,还是无法进行index =i;这一步时,说明我们插入的数据最小,最后的i直接赋值给index.即可
二维数组
冒泡排序
一种排序方法,通俗来说就跟泡泡一样往上走进行排序的意思,冒泡排序依靠两层循环,外层控制次数,内层逐个比较。
降序比较:从比较比较最前面相邻的两个数字开始,依次与后面比较,大的换到最前面。
反之升序就是小的换到最前面。
例如:
降序,1,6,8,4,5 ,就是1先与6比较,6>1就换到最前面,在依次和后面1,8,4,5比较,遇到大于它的8再换位置,再依次和后面的数字比较,第一个数确定好后,第二个,第三个...按照相同的方法排列。
直接来看例子:
有一组数据{2,5,6,1,3,4}要求冒泡降序
public class Test01 {
public static void main(String[] args) {
int [] nums={2,5,6,1,3,4};
//冒泡排序 外层 循环次数
for (int i=0; i< nums.length; i++){
//内层 比较
for (int j=i+1; j< nums.length; j++){
//如果后面数据(j=i+1)大于前面数据,位置互换
if (nums[j]>nums[i]){
int a=nums[i];
nums[i]=nums[j];
nums[j]=a;
}
}
}//遍历出结果
for (int num:nums){
System.out.println(num);
}
}
}
升级一下,用用户输入的数据进行排序
public class Test02 {
public static void main(String[] args) {
//声明数组,接收用户输入数据
int [] nums=new int[5];
Scanner input = new Scanner(System.in);
//使用for循环依次录入五组数据
for (int i=0; i< nums.length; i++){
System.out.println("请输入第"+(i+1)+"个数据");
int add = input.nextInt();
//把接收的数据放进数组
nums[i]=add;
}
//冒泡进行排序(在不同的作用域,可以使用相同的变量名)
for (int i=0; i< nums.length; i++){
for (int j=i+1; j< nums.length; j++){
if (nums[j]>nums[i]){
int a=nums[i];
nums[i]=nums[j];
nums[j]=a;
}
}
}
for (int num:nums){
System.out.println(num);
}
}
}
没什么太大区别,就是多了接收数据放进数组的一步。
今天先只说冒泡排序这一小块,详细的明天说