• 冒泡排序


    package com.yt.sort;
    
    import java.text.SimpleDateFormat;
    import java.util.Arrays;
    import java.util.Date;
    
    public class BubbleSort {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		//int arr[] = {3,9,-1,10,-20};
    		
    		//测试冒泡排序的速度
    		//创建一个80000个随机的数组
    		int[] arr = new int[80000];
    		for(int i = 0; i < 80000;i++) {
    			arr[i] = (int)(Math.random()*800000);
    		}
    		
    		//System.out.println(Arrays.toString(arr));
    		Date date1 = new Date();
    		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		String date1Str = simpleDateFormat.format(date1);
    		System.out.println("排序前的时间是=" + date1Str);
    		
    		//测试冒泡排序
    		bubbleSort(arr);
    		//System.out.println(Arrays.toString(arr));
    		
    		Date date2 = new Date();
    		//SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		String date2Str = simpleDateFormat.format(date2);
    		System.out.println("排序后的时间是=" + date2Str);
    		//大概是8秒的时间
    		
    		
    		
    		//为了更深刻的理解,将每一次排序的结果打印出来
    		
    		/*
    		//第一趟排序,将最大的一个数排在最后
    		//定义一个临时变量
    		int temp = 0;
    		for (int j = 0; j < arr.length - 1; j++) {
    			if (arr[j] > arr[j+1]) {//前面的数比后面的数大就交换
    				temp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = temp;
    			}
    		}
    		
    		System.out.println("第一趟排序结束之后:");
    		System.out.println(Arrays.toString(arr));
    		
    		//第2趟排序
    		for (int j = 0; j < arr.length - 1 - 1; j++) {
    			if (arr[j] > arr[j+1]) {
    				temp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = temp;
    			}
    		}
    		
    		System.out.println("第2趟排序结束之后:");
    		System.out.println(Arrays.toString(arr));
    		
    		// 第3趟排序
    		for (int j = 0; j < arr.length - 1 - 1; j++) {
    			if (arr[j] > arr[j + 1]) {
    				temp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = temp;
    			}
    		}
    
    		System.out.println("第3趟排序结束之后:");
    		System.out.println(Arrays.toString(arr));
    		
    		// 第4趟排序
    		for (int j = 0; j < arr.length - 1 - 1; j++) {
    			if (arr[j] > arr[j + 1]) {
    				temp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = temp;
    			}
    		}
    
    		System.out.println("第4趟排序结束之后:");
    		System.out.println(Arrays.toString(arr));
    		*/
    		
    		/*
    		// 第一趟排序
    		int temp = 0;
    		for(int i = 0; i < arr.length -1; i++){//循环的次数;(大循环)
    			for (int j = 0; j < arr.length - 1 - i; j++) {//每一次小循环需要比较的次数
    				if (arr[j] > arr[j + 1]) {
    					temp = arr[j];
    					arr[j] = arr[j + 1];
    					arr[j + 1] = temp;
    				}
    			}
    			System.out.println("第"+ (i+1) + "趟排序结束之后:");
    			System.out.println(Arrays.toString(arr));
    
    		}
    		*/
    		
    
    	}
    	//将冒泡排序算法封装成一个方法,优化方法:有一次没有进行比较就结束排序了
    	public static void bubbleSort(int[] arr) {
    		int temp = 0;//临时变量
    		boolean flag = false;//标识变量,表示是否进行过交换(代码小技巧)
    		for(int i = 0; i < arr.length - 1; i++) {
    			// n个数需要n-1次比较
    			for(int j = 0; j < arr.length - 1; j++) {
    				if (arr[j] >arr[j+1]) {
    					flag = true;//发生交换,重新修改flag的值
    					temp = arr[j];
    					arr[j] = arr[j+1];
    					arr[j+1] = temp;
    				}
    			}
    			//比较完毕之后
    			if (!flag) {
    				//flag的值是false,也就是说:flag = true;没有执行
    				break;
    			}else {
    				flag = false;//有比较过程,再一次修改flag的值
    			}
    		}
    	}
    }
    折叠
  • 相关阅读:
    表单重复提交:
    软件测试/测试开发 | AI大模型应用开发实训营来啦~ 大模型学习资料免费领
    开源VOSK引擎免费语音转文字部署
    《工程伦理与学术道德》第四章习题
    经典面试题 之 MQ
    Vue3+element-plus日期选择器 el-date-picker 设置可选最小时间方法
    2020 icpc 昆明 B. Chessboard 有源汇有上下界最小费用可行流 强制满流
    JUC并发编程--------基础篇
    将文件从windows传入到ubuntu
    Go Slice 排除异己
  • 原文地址:https://www.cnblogs.com/y-tao/p/16428818.html