您的位置:首页 > 编程语言 > Java开发

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: