一维数组的练习

目录

冒泡排序

数组拷贝

数组反转

数组扩容

数组缩减


冒泡排序

思路分析:

1.冒泡排序的思想是相邻的两个数进行比较,如果第一个数比第二数大的话,那么就交换

2.定义一个旗帜flag 如果本身的数组一直都是有序的,那么 可以增加了效率

3.交换两个元素可以用异或的操作,这样不需要创建第三个变量,减少内存开销。

package com.array;

/**
 * 演示冒泡排序
 */
public class BubbleSort {
    public static void main(String[] args) {
        //创建一个数组
        int[] arr = {1, 2, 3, 5, 4, 6, 7, 8, 9, 0};
        for (int i = 0; i < arr.length - 1; i++) {
            int flag = 1;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
//                    int tmp = arr[j];
//                    arr[j] = arr[j + 1];
//                    arr[j + 1] = tmp;
                    //使用异或的方式,可以不创建第三方的变量,减少内存的开销
                    arr[j + 1] ^= arr[j];
                    arr[j] ^= arr[j + 1];
                    arr[j + 1] ^= arr[j];
                    flag = 0;
                }
            }
            //如果flag没有被修改成1说明这个数组本来就是有序的增加了效率
            if (flag == 1) {
                break;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

数组拷贝

思路分析:

1.先创建一个和原数组一模一样大小的数组

2.循环的遍历原数组,把原数组的值,拷贝到新数组去

3.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收

4.最后遍历原数组并输出

package com.array;

/**
 * 演示数组拷贝
 */
public class arrayCopy {
    public static void main(String[] args) {
        //创建一个数组
        int[] arr1 = {1, 2, 3, 4};
        int[] arr2 = new int[arr1.length];//创建一个和arr1一样的数组
        for (int i = 0; i < arr2.length; i++) {//把原数组的内容拷贝到新数组去
            arr2[i] = arr1[i];
        }
        arr1 = arr2;//原来数组的指向新数组的,这样原来的数据空间就会被销毁
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i] + " ");
        }
    }
}


数组反转

思路分析:

1.先创建一个和原数组想同长度大小的数组

2.使用for循环拷贝,把原数组的最后一个位置的内容,拷贝到新数组的第一个位置去

3.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收

package com.array;

/**
 * 演示数组反转
 */
public class arrayReverse {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5, 6};
        int[] arr2 = new int[arr1.length];

        for (int i = 0; i < arr2.length; i++) {//数组拷贝
            arr2[i] = arr1[arr1.length - 1 - i];//
        }
        arr1 = arr2;
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i] + " ");
        }
    }
}


数组扩容

思路分析:

1.先创建一个scanner对象用来接受你要扩容的数字

2.创建一个新的数组,大小是比原来数组的大一个的数组

3.使用for循环循环的拷贝原数组的内容到新数组去

4.在要插入的元素,放到新数组的最后一个位置

5.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收

package com.array;

import java.util.Scanner;

/**
 * 演示数组扩容
 */
public class arrayAdd {
    public static void main(String[] args) {
        //创建一个scanner对象接受用户的输入
        Scanner scanner = new Scanner(System.in);
        //定义一个数组
        int[] arr1 = {1, 2, 3};
        for (; ; ) {//表示死循环
            System.out.print("请输入你要扩容的数:");
            int n = scanner.nextInt();//接受要扩容的数
            int[] arr2 = new int[arr1.length + 1];//创建一个比原来数组大1的数组
            for (int i = 0; i < arr1.length; i++) {//拷贝原来的数组到新数组的内容
                arr2[i] = arr1[i];
            }
            arr2[arr2.length - 1] = n;//把要扩容的数,赋给新数组的最后一个位置
            arr1 = arr2;//让原来的数组指向新的数组
            for (int i = 0; i < arr1.length; i++) {
                System.out.print(arr1[i] + " ");
            }
            System.out.print("\n请确认是否继续扩容:");
            char c = scanner.next().charAt(0);
            if (c == 'y') {
                System.out.println("继续扩容");
            } else if (c == 'n') {
                break;
            }
        }
    }
}


数组缩减

思路分析:

1.创建一个scanner对象,由用户判断是否继续缩减

2.如果用户确定要缩减数组,那么就创建一个比原来数组小一的数组,如果不缩减,那么就直接break

3.在使用for循环进行循环拷贝

4.让原数组指向新数组,那么原数组原来的空间就会因为,没有引用就会被jvm当作垃圾回收

package com.array;

import java.util.Scanner;

/**
 * 演示数组缩减
 */
public class arrayReduce {
    public static void main(String[] args) {
        //创建一个scanner对象接受用户的输入
        Scanner scanner = new Scanner(System.in);
        //定义一个数组
        int[] arr1 = {1, 2, 3};
        for (; ; ) {//表示死循环
            System.out.print("请确认是否继续缩减:");
            char c = scanner.next().charAt(0);
            if (c == 'y') {//表示确定缩减
                int[] arr2 = new int[arr1.length - 1];//创建一个比原数组小1的数组
                for (int i = 0; i < arr2.length; i++) {//拷贝原来的数组到新数组的内容
                    arr2[i] = arr1[i];
                }
                arr1 = arr2;//让原来的数组指向新的数组
                if (arr1.length == 0) {//如果数组的长度为0就不可以缩减了直接break
                    System.out.println("数组长度为0不可以继续缩减了");
                    break;
                }
            } else if (c == 'n') {
                break;
            }
            for (int i = 0; i < arr1.length; i++) {
                System.out.print(arr1[i] + " ");
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值