Java数组

初始化数组

//1
int[] a = {1,2,3};

//2 
int[] b = new int[10];
b[0]=1;
b[1]=2;
...

//3 默认初始化

数组特点

  • 长度是确定的,一旦被创建就不可更改
  • 元素必须相同
  • 数组元素可以是任何类型,基本类型和引用类型
  • 数组对象本身是在堆中的

二维数组

int[][] array = {{1,2},{2,3}};
System.out.println(array(0));//输出地址
print(array[0]);//调用print函数可以输出array[0]的值

public static void print(int[] arr){
	for(int a:arr){
		System.out.print(a+" ");
	}
}

数组函数

int a = {2,1,3,34,45};
Arrays.toString(a);//[2,1,3,34,45]
Arrays.sort(a);//升序返回void
Arrays.fill(a,0);//填充,将所有值置为0,返回void
Arrays.fill(a,2,4,0);//下标2、3值填充为0

冒泡排序(升序)

  • 稳定只有当两个数进行比较,后面的数比前面的小时才会交换位置,所以如果两个数相同,经过冒泡排序并不会影响之前位置
  • 时间复杂度O(n^2) 空间复杂度O(1)
  • 需要n-1轮,每轮都会确定一个元素的位置
步骤
  1. 从尾部开始比较相邻的两个元素,如果尾部的元素比前面的大,就交换两个元素的位置。
  2. 往前对每个相邻的元素都做这样的比较、交换操作,这样到数组头部时,第 1 个元素会成为最大的元素。
  3. 重复上面操作,知道没有数据为止

稀疏数组

输出原始数组:
0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 2 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 8 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
输出稀疏数组:
11 11 3 
1 2 1 
2 3 2 
6 4 8 

数组的常用算法

性质:稳定性,时间复杂度,空间复杂度

  • 冒泡排序(交换排序)
    1. 稳定 O(n^2) O(1)
    2. 从后往前两两比较相邻元素的值,按顺序选择是否交换,直到比较完,为一趟冒泡
  • 选择排序(简单选择&&堆排序)
    1. 不稳定 O(n^2)/O(nlog2n) O(1)
    2. 每次从待排序的数据中选择最小的一个
  • 插入排序(直接插入&&折半插入&&希尔)
    1. 稳定 O(n^2) O(1)
    2. 选择第二数据同第一个比较,对其进行排序,再选第三个从右向左进行排序直到到达左右大小关系不同的位置,后面依次,直到最后一位
  • 快速排序(交换排序)
    1. 不稳定 O(nlog2n) O(log2n)
    2. 取一个元素作为基准,两个指针low、high,用非空指针指向的数据和基准比较,如果大于基准,则指针移动,小于指针对应的数据放到空指针指向的位置,该指针移动
  • 归并排序
    1. 稳定 O(nlog2n) O(n)
    2. 二路归并:将数据两个为一组,在组内进行排序,再将排好序的两组数据合并为一组,再进行排序,直到所有数据完成排序
  • 希尔排序
    1. 不稳定 O(n^1.3) O(1)
    2. 对第i个同第i+n*d个数据进行直接插入排序并变化d重复操作,最后对整个序列进行一趟直接插入排序
  • 基数排序
    1. 稳定
    2. 先对个位数进行排序,当个位数相同时后面的链接到前一个下面,再对数据进行按列从左到右收集,在进行前一位的排序,知道到最高位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值