java数组扩展练习及冒泡排序,选择排序和折半查找

一.java—数组扩展练习

1.封装一个函数 传入数字1 返回 一  数字2 返回 二....

    // 通过角标找元素
    // 查表法
    public static char findArray(int index) {
        //声明一个char数组
        char[] array = new char[] {'一' ,'二','三','四','五'}; 
        // 按角标 返回对应的字符
        return array[index-1];
    }
2.封装一个函数  定义一个数组 数组值 分别 3,6,11,22   传入11  查找对应的位置

// 通过元素找角标
//为了让方法的使用性更强 可以把数组也当参数传进来
    public static int findIndex(int num, int[] array) {
        //遍历查找 元素对应的角标
        for (int i = 0; i < array.length; i++) {
            //有可能你传入的值不在数组中  可能会没有返回值
            if (num == array[i]) {
                return i;
            }
        }
        // 如果函数执行到这步  就说明 上面没有找到对应角标 直接返回-1
        return -1;
    }
3.封装函数 让数组元素 反转(将数组中的值 倒过来)
public static void reverse(int[] array) {
        for (int i = 0; i < array.length/2 ; i++) {
            int num = array[i];
            array[i] = array[array.length-1-i];
            array[array.length-1-i] = num;
        }
        //遍历数组
        System.out.println(Arrays.toString(array));
    }

二.冒泡排序,选择排序和折半查找

4.冒泡排序
冒泡排序的核心思想:相邻两个数进行比较 交换位置
public static void main(String[] args){
    int[] array = new int[]{3,2,5,1};
    for(i = 0;i < array.length-1;i++){
        for(j = 0;j < array.length-1-i;j++){
            if(array[j] > array[j + 1]){
            int temp = array[j];
            array[j] = array[j + 1];
            array[j+1] = temp;
            }
        }
    }
    System.out.println(Arrays.toString(array));
}
5. 选择排序
   选择排序核心思想: 选择一个数 依次和后面的数比较 换位
   public static void main(String[] args) {
        int[] array = new int[] {3,2,1,5};
        // 1.写循环架构
        // 外循环  -1  5个数比4趟 比较长度-1趟
        for (int i = 0; i < array.length-1; i++) {
            //内循环 1+i 把不需要比较的去除  array[0]和array[0]  每一次确定一个数
            for (int j = 1+i; j < array.length; j++) {
                //比较  交换
                if (array[i] > array[j]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
    }
6.折半查找
  //查找 22的角标
  //int[] array = new int[]{5,6,9,12,18,22,33};
  public static void main(String[] args) {
        int[] array = new int[]{5,6,9,12,18,22};
        //把要用到的变量 全部声明一遍
        //声明最大角标 最小角标 中间角标
        int min = 0;
        int max = array.length - 1;
        int mid = (min + max) / 2;
        //要查找的值
        int key = 10;
        /*
         * 循环查找
         * array[mid] = key
         */
        while (key != array[mid]) {
            //比较  如果比中间角标大  挪动小角标 
            //  如果比中间角标小 挪动大角标
            if (key > array[mid]) {
                min = mid +1;
            }else if(key < array[mid]) {
                max = mid - 1;
            }
            // 挪动完角标后 还要进行折半操作
            mid = (min + max) / 2;
            //当最大角标小于最小角标的时候 说明数组中没有这个数
            if (max < min) {
                //进到这里说明没这个数
                mid = -1;
                break;
            }
        }
        System.out.println("这个数的角标是:" + mid);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值