Java语法基础(2)—— 冒泡排序、插入排序
2017-10-09 23:18
316 查看
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; } }
相关文章推荐
- 黑马程序员——java基础排序算法:选择排序、冒泡排序和插入排序
- java 算法基础之六插入排序与冒泡排序
- 排序基础之插入排序、冒泡排序、选择排序详解与Java代码实现
- JAVA基础及语法部分面试题(2)
- 第二章:Java编程基础语法
- JAVA基础语法
- 二、JAVA语法基础
- java 语法基础1
- Java_基础语法2
- Java_语法基础_优先选择基本类型
- java基础之冒泡排序
- Java--基础(二)语法
- 南哥带你学 Java 之 Java 基础语法
- 黑马程序员一一Java基础语法(四)
- Java语法基础
- 黑马程序员——Java基础语法---函数
- JAVA基础二基本语法介绍
- Java基础语法篇(1)
- JAVA进阶学习-java基础语法
- 冒泡排序(java基础)