数组---拷贝 查找 排序 冒泡排序(5)

数组转成字符串

//         查看数组的内容,希望可以更方便的查看
//         就可以把数组内容按照一定格式组织成一个字符串
          int[] arr = {1, 2, 3, 4};
          System.out.println(Arrays.toString(arr));

[1, 2, 3, 4]

Process finished with exit code 0

数组拷贝

        int[] arr = {1, 2, 3, 4};
        int[] result = copyOf(arr);
        System.out.println(Arrays.toString(result));


    }

    public static int[] copyOf(int[] arr) {
        int[] newArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];

        }
        return newArr;

    }
       int[] arr = {1, 2, 3, 4};
//        int[] result = copyOf(arr);
        int[] result  = Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(result));

找数组的最大元素/最小元素

        int[] arr = {5, 3, 7, 8, 9, 6};
        int maxValue = max(arr);
        System.out.println(maxValue);
    }

    public static int max(int[] arr) {
        int result = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > result) {
                result = arr[i];
            }
        }
              return result;

求平均值

        int[] arr = {5, 3, 7, 8, 9, 6};
        double avgValue = avg(arr);
        System.out.println(avgValue);
    }

    public static double avg(int[] arr) {
        int sum = 0 ;
        for(int x : arr){
//            将数组arr的值循环赋值给x
            sum+=x;

        }
//        强制类型转换
      return (double)sum/arr.length;
    }

查找数组中的指定元素

        int[] arr = {5, 3, 7, 8, 9, 6};
        int pos = search(arr,3);
        System.out.println(pos);
    }

     public static int search(int[] arr, int toSearch){
//        需要依次遍历访问元素
         for (int i = 0 ;i < arr.length;i++){
             if(arr[i]==toSearch){
                 return i ;
             }
         }

         return -1;
     }

二分查找/折半查找

必须保证数组是有序的

本质在于,拿待查找区间的中间元素,和待查找元素进行比较,每次比较都能够砍掉一半的区间

代码👇

        int[] arr = {3,4,5,6,9,10,11};
        int pos = binarySearch(arr,3);
        System.out.println(pos);
    }

    public static int binarySearch(int[] arr, int toSearch) {
//        [left right]
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (toSearch < arr[mid]) {
//                在左侧区间中查找 排除右侧区间
                right = mid - 1;
            } else if (toSearch > arr[mid]) {
//                在右侧区间查找 排除左侧区间
                left = mid + 1;
            } else {
//                相等的情况
                return mid;
            }
        }
        return -1;
    }

检查数组是否有序

           int[]arr={2,3,5,8,10,13,19};
        System.out.println(isSortde(arr));

    }

    public static boolean isSortde(int[] arr) {
        for (int i = 0; i < arr.length-1; i++) {
//            i+1<arr.length = i< arr.length-1
            if (arr[i] > arr[i + 1]) {
//                反例 不符合升序
                return false;
            }

        }
        return true;

冒泡排序

       int[] arr = {9,5,2,7,3,6};
       bubbleSort(arr);
//        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

    }

    public static void bubbleSort(int[] arr) {
//        从后往前遍历的版本
//        外层循环控制遍历次数
//        已排序区间:[0,bound)
//        待排序区间:[bound,length)
        for (int bound = 0; bound<arr.length;bound++){
//            里层循环控制比较交换
            for(int cur = arr.length-1; cur>bound;cur--){
                if(arr[cur-1] > arr[cur]) {
//                    不符合排序要求 交换
                    int tmp = arr[cur-1];
                    arr[cur-1] = arr[cur];
                    arr[cur] = tmp;

数组逆序 

逆序是要修改数组的内容,而不是反向打印   

代码如下👇

       int[] arr = {9,5,2,7,3,6};
       reverse(arr);
        System.out.println(Arrays.toString(arr));
        
    }

    public static void reverse(int[] arr) {
        int left = 0;
        int right =arr.length-1;
        while(left < right){
            int tmp = arr[left];
            arr[left]=arr[right];
            arr[right]=tmp;

            left++;
            right--;

        }
    }

[6, 3, 7, 2, 5, 9]

奇偶排序 偶数放左边 奇数放右边  代码如下👇

       int[] arr = {9,5,2,7,3,6};
       transform(arr);
        System.out.println(Arrays.toString(arr));

    }

    public static void transform(int[] arr) {
        int left = 0;
        int right = arr.length-1;
        while(left<right){
//            先从左往右找到一个奇数
            while(left < right && arr[left]%2==0){
                left++;
            }
//            再从右往左找一个偶数
            while (left < right && arr[right]%2!=0){
                right--;
            }
//            交换left 和 right
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right]=tmp;

[6, 2, 5, 7, 3, 9]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值