八.数组和排序

15.数组

相当于容器,用一个变量存储更多的数据

15.1定义

  1. 数据类型[ ] 数组名 = {值1,值2,值3,值4,…};

  2. 数据类型[ ] 数组名 = new 数据类型[容量];

  3. 数组类型[ ] 数组名 = new 数据类型[ ] {值1,值2,值3,…};

可知第二种声明方式需要额外赋值:

​ 数组名【下标】= 值;

对数组某个位置的元素单独赋值,下标从0 开始

15.2从数组中取值

		//for循环遍历取值
		int[] arr = new int[] {1,2,3,4,5,6};
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		System.out.println(Arrays.toString(arr));
		System.out.println("++++++++++++++++");

		//使用下标取数组中单个值	arr[1]
		System.out.println(arr[1]);
  1. 打印数组中单个元素未赋值的话会有默认值:
    整型 0 浮点0.0 字符0 引用类型null 布尔型:false

  2. 直接打印整个数组的话打印出来的是地址值,需要使用Arrays.toString()转换为字符串 char除外,char打印出来的直接是字符

15.3二维数组【了解】

package com.qfedu.c_array;

import java.util.Arrays;

public class Demo5 {
	public static void main(String[] args) {
		
		//[1,2,3,4]
		//二维数组  行 列
		//[[1 , 2, 3],
		// [2, 4 , 5]]
		//int[] arr = new int[3];
		int[][] arr = new int[2][3];//总共6个
		arr[0][0] = 1;
		arr[0][1] = 2;
		arr[0][2] = 3;
		arr[1][0] = 2;
		arr[1][1] = 4;
		arr[1][2] = 5;
		System.out.println(arr);
		System.out.println(Arrays.toString(arr));
		//取值 使用循环
		for (int i = 0; i < 2; i++) {//行
			for (int j = 0; j < 3; j++) {
				System.out.println(arr[i][j]);
			}
			
		}
		
		
	}

}

15.4数组可以作为方法的参数和返回值【重点】

作为参数 格式:

public static void 方法名字(数据类型[ ] 形参) {

}

作为返回值 格式:

public static 数据类型 方法名字 () {

​ return 。。。。;

}

八大数据类型和String还有数组都能当成一个方法的返回值

15.5数组在内存中的分配【了解】

内存区域的名字作用
寄存器给CPU使用的,和开发没有关系
本地方法栈JVM虚拟机操作咱们的电脑的系统的时候,才会使用
方法区存储和运行的class文件
堆区存储的是对象或者数组, 凡是new出来的都存在堆区
方法栈方法运行的时候使用的内存,比如main方法会进入到方法栈区

栈:存储的是八大基本数据类型的数据

	int a = 20; 这个存在了栈区

	存储的是对象的引用  scanner   就是一个对象的等号的左边的

	Scanner scanner = new Scanner(System.in);

堆区:

	凡是new的 都存在堆区

	int[] arr = new int[5];

	arr存在了栈区     new int[5];存在了堆区

	Scanner scanner = new Scanner(System.in);

scanner  存在了栈区, new Scanner(System.in);  在堆区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdUqDdtg-1658907792449)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220719210043706.png)]

16.排序

16.1选择排序

原理:找到最小值的索引,然后和第一个数据进行交换。在找到除了第一个数据外的最小值的索引,再和第二个数据交换

//选择排序   升序
	public static void selectSort(int[] arr) {
		//循环选出最小值元素的索引
		//轮数  元素个数减一
		for (int i = 0; i < arr.length-1; i++) {
			int minIndex = i;
			//每轮比较次数  拿第一个 也就是i 和后边未排序的每个比较(包括自己) 找到更小的交换  需要比较剩余元素数减1 
			for (int j = i; j < arr.length; j++) {
				if(arr[minIndex] > arr[j]) {
					int temp = arr[minIndex];
					arr[minIndex] = arr[j];
					arr[j] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
	
	//选择排序  降序
	public static void selectSortDown(int[] arr) {
		//循环选出最小值元素的索引
		//轮数  元素个数减一
		for (int i = 0; i < arr.length-1; i++) {
			int maxIndex = i;
			//每轮比较次数  拿第一个 也就是i 和后边未排序的每个比较(包括自己) 找到更小的交换  需要比较剩余元素数减1 
			for (int j = i; j < arr.length; j++) {
				if(arr[maxIndex] < arr[j]) {
					int temp = arr[maxIndex];
					arr[maxIndex] = arr[j];
					arr[j] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}

16.2冒泡排序

//冒泡升序
	public static void maoPaoUp(int[] arr) {
		//轮数   元素个数减一
		for (int i = 0; i < arr.length-1; i++) {
			//每个元素冒泡次数,每一个元素都比前一个少冒一次 所以减i
			for (int j = 0; j < arr.length-1-i; j++) {
				if (arr[j] > arr[j +1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
	
	
	//冒泡降序
	public static void maoPaoDown(int[] arr) {
		//轮数 
		for (int i = 0; i < arr.length-1; i++) {
			//每个元素比较次数
			for (int j = 0; j < arr.length-1-i; j++) {
				if (arr[j] < arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值