冒泡排序(Bubble Sort)-Java实现

冒泡排序(Bubble Sort)算法简介:

冒泡排序是一种常见的交换排序。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”。其基本思想是两两比较相邻记录,如果反序则交换,直到没有反序的记录为止。

冒泡排序(Bubble Sort)算法原理:

例如我们有一个数组,我们需要把较小的元素排在前面,把较大的元素排在后面,那么需要从尾部到头部开始比较操作:

  • 从尾部开始比较相邻的两元素,如果右边元素左边元素小,则交换两元素位置;否则不作交换。
  • 从后往前对每两相邻元素都做同样的比较、交换操作,直到到达数组序列最左边,此时序列中最小的数字会移动到最左端。
  • 重新从尾部开始第 1、2 步的操作,除了在这之前头部已经排好的元素。
  • 继续对越来越少的数据进行比较、交换操作,直到没有可比较的数据为止,排序完成。

举例说明:

现在需要对数组序列 5 9 3 1 2 8 4 7 6 运用冒泡排序算法从小到大排序。从尾部起,一次比较两个元素,如果反序则交换,否则不交换。

第一步:从尾向前,6<7,互换位置: 5 9 3 1 2 8 4 6 7

第二步:左移一位,6>4,不换位置: 5 9 3 1 2 8 4 6 7

第三步:左移一位,4<8,互换位置: 5 9 3 1 2 4 8 6 7

.................

第八步:左移一位,1<5,互换位置: 1 5 9 3 2 4 8 6 7

第1轮操作结束,序列中最小的数字就会移动到最左边。重复上述操作直到序列中第二小的数字移动到第二位,第n小的数字移动到第n位。直到所有的数字都归位为止,则排序完成。

冒泡排序(Bubble Sort)代码实现:

import java.util.Arrays;

public class Demo {
 
	public static void main(String[] args) {
		int[] array= {5,9,3,1,2,8,4,7,6};
		bubbleSort(array);
	}
	public static void bubbleSort(int[] array){
		//外层循环,是需要进行比较的轮数,一共进行8次即可
		for(int i=array.length-1;i>0;i--) {
			//内存循环,是每一轮中进行的两两比较与交换
			for(int j=array.length-1;j>array.length-i-1;j--) {
				if(array[j-1]>array[j]) {
					int temp=array[j];
					array[j]=array[j-1];
					array[j-1]=temp;
				}
			}
			System.out.println("第"+(array.length-i)+"轮排序后的数组为:"+Arrays.toString(array));
		}
	}
}

冒泡排序(Bubble Sort)的时间复杂度:

在冒泡排序中,第1轮需要比较n-1次,第2轮需要比较n-2,.....,第n-1轮需要比较1次。因此,总的比较次数为(n-1)+(n-2) +...+1≈n²/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。不过,交换数字的次数和输入数据的排列顺序有关。假设出现某种极端情况,如输入数据正好以从小到大的顺序排列,那么便不需要任何交换操作;反过来,输入数据要是以从大到小的顺序排列,那么每次比较数字后便都要进行交换。因此,冒泡排序的时间复杂度为O(n²)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值