java冒泡排序,二分法及二维数组

/*回顾

一、时间复杂度

1.知道常见的时间复杂度

2.能推导出时间复杂度

        算法:解决问题的方法;

                时间:

                空间:

        函数:O(1),O(n),O(logn),O(n^2),O(n^3),O(n!),O(2^n)

        推导:常数O(1);只取最高阶;如果不是常数,去掉常数;

二、双指针:

分离:

对撞:盛水最多容器

快慢:

三、排序

直接选择排序:分成两部分,已排序堆,未排序堆,每次从未排序堆选出最大(小)的元素,放在已排序堆的第i位。

*/

一、冒泡排序

思想:

        分成两部分,已排序堆,未排序堆;

过程:

        每次比较相邻的两个元素,如果顺序错误,进行交换;整合排序过程很像水里冒泡。

二、二分查询

查找:从数组中找到符合条件的元素;

让你接收一个数,判断此数是否在数组中存在,如存在,返回位置,不存在,返回-1;

无序:暴力;

有序:

1.暴力;

2.二分:时间复杂度O(logn);

代码:

public static void main(String[] args) {
    Random r = new Random();
    int a[] = new int[10];
    for (int i = 0; i <a.length ; i++) {
        a[i] = r.nextInt(100);
    }
    System.out.println(Arrays.toString(a));
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int left = 0;
    int right = a.length-1;
    String info = "查无此数";
    while(left<=right){
        //找到中间点
        int middle = (left+right)>>1;
        //判断是否相等
        if(n==a[middle]){
            info = "此数已找到,位置是:"+middle;
            break;
        }
        else if(n>a[middle]){
            left = middle+1;
        }
        else{
            right = middle - 1;
        }
    }
    System.out.println(info);
}

三、二维数组

1.二维数组也是一个数组,只不过元素类型是一个数组;

2.二维数组中可以包含多个一维数组,每个一维数组的长度可以不一致(任意);

3.获得二维数组的长度可以使用数组名.length,获得一维数组的长度可以使用一维数组名.length;

int a[];

int a[] [];

每名同学:

数学,语文,外语,物理,化学;

创建四个数组:score1,score2,score3,score4;

创建一个二维数组,包含以上四个元素,每个元素是一个int【】数组;

此时二维数组score的长度为4,因为包含了四个一维数组;

如何定义二维数组

数据类型 数组名[] [] ;

int [] [] a;

数组的初始化

动态初始化

int a[] [] = new int [3] [4] ;//a由三个一维数组组成,每个一维数组的长度都是4,即3行4列;

int a[] [] = new int [3] [ ];//a由三个一维数组组成,每个一维数组并未开辟空间;

a[0] = {2,5,6,7};

a[1] = new int[] {1,3};

a[2] = new int[]{5,6,7};

静态初始化

int a[] [] = new int[] [] {{1,2,3},{3,4,5},{7,8,9,10}};

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值