冒泡排序

  • 数据结构的学习
  • 冒泡排序
  • 排序花费的时间探索
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 - i; 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的值
			}
		}
	}
}
posted @ 2022-06-30 22:09  半路_出家ren  阅读(59)  评论(0编辑  收藏  举报
返回顶端