Java基础:代码小作业(三)

1、冒泡排序算法

冒泡排序是将数组的第一个,与后面的两两相比后,将大的往后放,在最后面的是最大的数。
然后循环将第一个数与后面的两两相比,取大的放后面。
因为每次找到最大的放在后面,所有每次循环过后,下一循环不用比较已经排好的最大数,只需要比上一循环少比较一个数。

代码

/**
 * @author Hui
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] nums = {12,321,4242,52,52,345,343,3,2};
        // i为已找到最大值的个数
        for (int i = 0;i < nums.length-1;i++){
            // j为新一次循环的变量
            for (int j = 0;j < nums.length-1-i;j++){
                if (nums[j] > nums[j+1]){
                    int temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;
                }
            }
        }
        for (int num : nums) {
            System.out.println(num);
        }
    }
}


2、二分查找(折半查找)算法

此算法需要对有序数组进行查找。
每次都取中间值进行比较,取目标值所在区域。
循环直至找到目标值。

代码

import java.util.Scanner;

/**
 * @author Hui
 */
public class BinarySearch {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] nums = {12,32,44,47,54,88,89,97,122,123,444};
        int result = -1;
        System.out.println("请输入你要查找的数值:");
        int target = scanner.nextInt();
        // 获取边界值。
        int left = 0,right = nums.length;
        while (left <= right){
            if (target < nums[0] || target > nums[nums.length-1]){
                System.out.println("您所输入的值不在范围内!");
                break;
            }
            int middle = (left+right)/2;
            if (target == nums[middle]){
                result = middle;
                System.out.println("查询成功!");
                System.out.println("它在第" + (result+1) + "位。");
                break;
            }else if(target < nums[middle]){
                right = middle - 1;
            }else {
                left = middle + 1;
            }
        }
    }
}

3、归并

将两个有序数组合并成一个有序数组。

/**
 * @author Hui
 */
public class Merger {
    public static void main(String[] args) {
        int[] nums1 = {3,5};
        int[] nums2 = {2,4,6};
        int[] nums = new int[nums1.length+nums2.length];
        // 定义下标。
        int i = 0,j = 0;
        while (i < nums1.length || j < nums2.length){
            // 判断数组1是否排完,排完则数组2剩余的全部放入。
            if (i == nums1.length){
                nums[i+j] = nums2[j];
                j++;
                // 跳出不执行两数组判断。
                continue;
            }else if (j == nums2.length){
                nums[i+j] = nums2[i];
                i++;
                continue;
            }
            // 两数组对应下标判断,取小值放入新数组。
            if (nums1[i] < nums2[j]){
                nums[i+j] = nums1[i];
                i++;
            }else  if (nums1[i] >= nums2[j]){
                nums[i+j] = nums2[j];
                j++;
            }
        }
        for (int num : nums) {
            System.out.println(num);
        }
    }
}

4、杨辉三角

打印一个杨辉三角。
在这里插入图片描述
代码

/**
 * @author Hui
 */
public class YangHui {
    public static void main(String[] args) {
        // 杨辉三角的高度。
        int max = 7;
        // 定义一个二维数组。
        int[][] array = new int[max][];
        // 定义每一层的大小。
        for (int i = 0; i < max; i++) {
            array[i] = new int[i+1];
        }
        // 填充杨辉三角。
        for (int i = 0; i < max; i++) {
            for (int j = 0; j < array[i].length; j++) {
                // 凡是两边,都填充1。
                if (j == 0 || j == array[i].length-1){
                    array[i][j] = 1;
                    continue;
                }
                // 剩余的按规律来。
                array[i][j] = array[i-1][j-1] + array[i-1][j];
            }
        }
        // 打印看结果
        for (int i = 0; i < max; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
}

可自行对杨辉三角打印进行优化。



注:本人水平有限,本文仅为个人理解,若有错漏缺点不可避免,望读者批评指正。


版权声明:本文为weixin_45450352原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。