java之冒泡排序法

冒泡排序的根本是对相邻元素进行比较,然后交换,每轮排序后有一个值浮上来

当某一轮排序之后,该数组已经有序,则不再进行比较,交换,这是一种优化,可以减少比较次数。

package com.wyww.bubblesort;

import java.util.Random;

/***
 * 冒泡排序法,根据相邻元素进行排序
 * 对相邻元素进行比较,若需要交换则进行交换
 */
public class BubbleSort {

	public static void main(String[] args) {
		//1、生成要排序的数组
		int[] arr = new int[10];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = new Random().nextInt(100);
		}
		System.out.println("排序前:");
		for (int i : arr) {
			System.out.print(i+"\t");
		}
		System.out.println();
		
		
		//假设数组是无序的,对排序进行优化,若在某一次排序比较之后已经有序,则后面不再进行比较
		boolean isSorted = true;
		//2、冒泡排序法
		for (int i = 0; i < arr.length-1 && isSorted; i++) {
			isSorted = false;
			for (int j = 0; j < arr.length-1-i; j++) {
				if(arr[j]>arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
					//如果有发生比较,则仍是无序
					isSorted = true;
				}
			}
		}
		
		
		//3、输出已排序的数组
		System.out.println("排序后:");
		for (int i : arr) {
			System.out.print(i+"\t");
		}
	}

}

优化前后比较,比较次数少了4次,从第六次开始已经有序,故后面不再比较判断

优化前

排序前:
2    45    16    95    4    53    62    23    65    56    
2    16    45    4    53    62    23    65    56    95    
2    16    4    45    53    23    62    56    65    95    
2    4    16    45    23    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
排序后:
2    4    16    23    45    53    56    62    65    95

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

优化后
排序前:
2    45    16    95    4    53    62    23    65    56    
2    16    45    4    53    62    23    65    56    95    
2    16    4    45    53    23    62    56    65    95    
2    4    16    45    23    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
2    4    16    23    45    53    56    62    65    95    
排序后:
2    4    16    23    45    53    56    62    65    95    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值