冒泡排序及其优化 JAVA版本

版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/88363065

冒泡排序

import java.util.Arrays;
import java.util.Scanner;
/*
*测试冒泡排序及其优化
*@author Ravanla
*/
public class TestBubbleSort {
	public static void main(String[] args) {
		/*importance
		 * 外层循环 0到n-1   设为i
		 * 内层循环 0到n-1-i   设为j
		 * 假设n为5
		 * 外层i会经过 0 1 2 3 4
		 * 				i = 0 		i = 1 	  i = 2		i=3	      i=4
		 * 内层j会经过 0 1 2 3 4 -> 0 1 2 3   -> 0 1 2   -> 0 1   -> 0
		 */
		Scanner input = new Scanner(System.in);
		int NUM = 5;
		int[] a = new int[NUM];
		System.out.println("请输入数字");
		
		for(int i = 0; i < a.length; i++) {
			a[i] = input.nextInt();
		}

		System.out.println("排序之前:");
		for(int i : a) {
			System.out.print(i + "\t");
		}

//		冒泡排序
		for(int i = 0; i < a.length - 1; i++) {
			for(int j = 0; j < a.length - 1 - i; j++) {
			//把符合条件的数进行交换
				if(a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
//不妨把每次执行的过程输出来观察观察   
//前面引入了Arrays包便可以引用Arrays.toString(int[] a)将a数组(对象)的当前内容输出在console
				System.out.println(Arrays.toString(a));
			}
			System.out.println("#############################");
		}

		System.out.println("\n排序之后:");
		for(int i : a) {
			System.out.print(i + "\t");
		}

优化console中输出的结果01

所以我们需要在蓝色字体那一段之后的三次循环立刻结束,我们需要让计算机明白我们的意思

//		冒泡排序
		for(int i = 0; i < a.length - 1; i++) {
		//我们在此处加入标记
			boolean flag = true;
			for(int j = 0; j < a.length - 1 - i; j++) {
			//把符合条件的数进行交换
				if(a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
					
					//若执行了if语句的内容,便实行了交换,我们给标记记为false
					flag = false}
				System.out.println(Arrays.toString(a));
			}
			//如果上个for都没有发生交换,说明已经交换好了,就可以直接结束了
			//数组的内容交换了  flag就为false  这个if语句就不会执行break
			//若flag为true  说明a数组里的数字已经不需要排序了,直接结束就好了
			if(flag) {
				break;
			}
			System.out.println("#############################");
		}

在这里插入图片描述
之后还会有跟多的优化。


猜你喜欢

转载自blog.csdn.net/weixin_43584220/article/details/88363065