数组和冒泡、选择排序

数组

一个容器,是存放相同类型数据的集合

​ 长度一旦确定,不可变

​ 数组扩容:新建个大数组,小数组数据拷入大数组【效率低】

优点:

  • 可以存基本类型的数据,也可以存引用类型的数据
  • 内存地址是连续的;检索,查找某个下标的元素效率高

缺点:

  • 随机删除,增加元素效率低
  • 不能存大容量数据,很难在内存上找到特别大的连续的内存空间
//基本数据类型

//静态初始化
int[] array = {1,2,3};
// 动态初始化
int[] array1 = new int[5];

//引用数据类型
String[] array2 = xxx;
Person[] array3 = xxx;

所有的数组都有length属性

//length是属性,不是方法
int a = array1.length;
数组扩容
System.arroycopy(拷贝源,拷贝源的起始下标,目标数组,目标起始下标,拷贝长度);
二维数组

一维数组中的每个元素都是一维数组

int[][] a = {
    			{1,2,3},
             	{4,5,6,0},
             	{7,8,9}
            }
常用算法

数组工具类 :java.util.Arrays

静态方法sort排序

Arrays.sort(int数组);
排序

冒泡排序:比较(n^2-n)/2次

比较的数据:9 7 5 8 10
    第一次循环:冒出最大的10
    7 9 5 8 1097比较,交换位置)
    7 5 9 8 1095比较,交换位置)
    7 5 8 9 1098比较,交换位置)
    7 5 8 9 10910比较,不交换位置)
    第二次循环:冒出9
    5 7 8 9   1075比较,交换位置)
    5 7 8 9   1078比较,不交换位置)
    5 7 8 9   1089比较,不交换位置)
    第三次循环:冒出8
    5 7 8   9 1057比较,不交换位置)
    5 7 8   9 1078比较,不交换位置)
    第四次循环:冒泡7
    5 7   8 9 1057比较,不交换位置)
public static int[] arraySort(int[] array){
        int temp = 0;
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j]>array[j+1]) {
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        return array;
}

选择排序 :比较(n^2-n)/2次,但交换次数少

  • 原理:找出最小的,和第一个交换位置
  • 实现:比较数据,找出最小的数据的下标,然后使用这个下标的数据和第一个数据交换位置
比较的数据:9 7 5 8 10
    第一次循环结果:59交换位置
    5 7 9 8 10
    第二次循环结果:7不交换
    5   7 9 8 10
    第三次循环结果:89交换位置
    5 7   8 9 10
    第四次循环结果:不交换
    5 7 8   9 10

比冒泡排序效率高

查找

一个一个找

二分法查找:在已经排序的基础上实现

Arrays.binarySearch(数组对象,要查找的元素);//返回下标或者索引
稀疏数组

对数组压缩节省空间

n行三列:

第一行【数组行数,数组列数,有效数据个数】

第二行【第几行,第几列,数据】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值