Java语法基础(2)—— 冒泡排序、插入排序

1、判断闰年
package stage1;

import java.util.Scanner;
public class LeapyYear {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        int year = scanner.nextInt();
        scanner.close();
        /*四年一闰,百年不闰,四百年再闰*/
        boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) 
                || year % 400 == 0;
        String msg = isLeapYear ? year + "是闰年" : year + "不是闰年";
        System.out.println(msg);
    }

}

2、比较for循环和递归的效率
package stage1;

public class Recursive {

    public static void main(String[] args) {
        int n = 50;
        //获取当前时间  
        long time = System.currentTimeMillis();
        System.out.println("fibByFor(" + n + ")=" + fibByFor(n));
        System.out.println("使用for循环计算,用时:" 
                + (System.currentTimeMillis() - time) + "毫秒");

        time = System.currentTimeMillis();
        System.out.println("fibByRecursive(" + n + ")=" + fibByRecursive(n));
        System.out.println("使用递归计算,用时:" 
                + (System.currentTimeMillis() - time) + "毫秒");
        }

        //循环方式计算费氏数列 
        public static long fibByFor(int n) {
            if (n == 1 || n == 2)
                return 1;
            long f1 = 1;
            long f2 = 1;
            for (int i = 3; i <= n; i++) {
                f2 = f1 + f2;
                f1 = f2 - f1;
            }
            return f2;
        }

        //递归方式计算
        public static long fibByRecursive(int n) {
            if (n == 1 || n == 2)
                return 1;
            return fibByRecursive(n - 1) + fibByRecursive(n - 2);
        }
}

程序运行结果如下:
  fibByFor(50)=12586269025
  使用for循环计算,用时:0毫秒
  fibByRecursive(50)=12586269025
  使用递归计算,用时:49299毫秒


3、冒泡排序
package stage1;

import java.util.Random;
import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        //创建数组
        int[] arr = new int[6];
        Random ran = new Random();
        for (int i = 0;i < arr.length;i++) {
            arr[i] = ran.nextInt(100);
        }
        System.out.println(Arrays.toString(arr));

        //冒泡排序
        /*冒泡排序既可以采用大气泡上浮的方式,也可以采用小气泡沉底的
         *方式,这里用的是大气泡上浮的方式,小气泡沉底则是从另一头
         *开始,把小数往下沉。*/
        System.out.println("-------冒泡排序  开始-------");
        for (int i = 0;i < arr.length - 1;i++) {
            boolean isSwap = false;
            for (int j = 0;j < arr.length - 1 - i;j++) {
                if (arr[j] > arr[j + 1]) {
                    int t = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = t;
                    isSwap = true;
                }
            }

            if (!isSwap) {
                break;
            }
            System.out.println(Arrays.toString(arr));
        }
        System.out.println("---------冒泡排序  结束------");
        System.out.println(Arrays.toString(arr));
    }
}

程序某次运行的结果:
  [45, 82, 45, 86, 87, 10]
  ——-冒泡排序 开始——-
  [45, 45, 82, 86, 10, 87]
  [45, 45, 82, 10, 86, 87]
  [45, 45, 10, 82, 86, 87]
  [45, 10, 45, 82, 86, 87]
  [10, 45, 45, 82, 86, 87]
  ———冒泡排序 结束——
  [10, 45, 45, 82, 86, 87]


4、插入排序
package stage1;

import java.util.Random;
import java.util.Arrays;

public class InsertSort {

    public static void main(String[] args) {
        int[] arr = new int[6];
        Random ran = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = ran.nextInt(100);
        }

        //插入排序
        System.out.println(Arrays.toString(arr));
        System.out.println("-------插入排序  开始-------");
        for (int i = 1; i < arr.length; i++) {
            int k = arr[i];//取出待插入元素
            //找到插入位置
            int j;
            for (j = i - 1; j >= 0 && k < arr[j]; j--) {
                arr[j + 1] = arr[j];//移动元素
            }
            //插入元素
            arr[j + 1] = k;
            System.out.println(Arrays.toString(arr));
        }
        System.out.println("-------插入排序  结束-------");
        System.out.println(Arrays.toString(arr));
    }
}

程序某次运行的结果:
  [0, 76, 85, 72, 22, 31]
  ——-插入排序 开始——-
  [0, 76, 85, 72, 22, 31]
  [0, 76, 85, 72, 22, 31]
  [0, 72, 76, 85, 22, 31]
  [0, 22, 72, 76, 85, 31]
  [0, 22, 31, 72, 76, 85]
  ——-插入排序 结束——-
  [0, 22, 31, 72, 76, 85]


5、猜字符小游戏
package stage1;

import java.util.Random;
import java.util.Scanner;
//猜字符
public class GuessingGame {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int count = 0;//记录猜错的次数
        char[] chs = generate();//生成5个字符
        System.out.println(chs);//println可以输出字符数组,但不能输出int数组

        /*for (int i = 0;i < chs.length;i++) {
            System.out.print(chs[i]);
        }
        System.out.println();*/

        while (true) {
            System.out.println("猜吧!");
            String str = scan.next().toUpperCase();//接收用户的串
            if (str.equals("EXIT")) {
                System.out.println("下次再来");
                break;
            }

            char[] input = str.toCharArray();
            int[] result = check(chs,input);
            if (result[1] == chs.length) {
                int score = chs.length * 100 - count * 10;
                System.out.println("恭喜你,猜对了,得分"+score);
                break;
            }else {
                count++;
                System.out.println("字符对了"+result[0]+"个,位置对了"+result[1]+"个");
            }
        }
        scan.close();
    }

    //随机生成5个字符数组
    public static char[] generate() {
        char[] chs = new char[5];
        Random rand = new Random();
        char[] letters = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        boolean[] flags = new boolean[letters.length];
        for (int i = 0;i < chs.length;i++) {
            int index;
            do {
                index = rand.nextInt(letters.length);
                /*index = (int)(Math.random() * letters.length)*/
            }while(flags[index]);
            chs[i] = letters[index];
            flags[index] = true;
        }

        return chs;
    }

    //比较
    public static int[] check(char[] chs,char[] input) {
        int[] result = new int[2];
        for (int i = 0;i < chs.length;i++) {
            for (int j = 0;j < input.length;j++) {
                if (chs[i] == input[j]) {
                    result[0]++;
                    if (i == j) {
                        result[1]++;
                    }
                    break;
                }
            }
        }

        return result;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值