数据结构之排序(一)冒泡排序

本文详细介绍了冒泡排序算法的基本思想及其实现过程。通过具体的Java代码实现,展示了如何通过两两比较相邻元素并交换顺序来完成排序。同时,文章还分析了冒泡排序的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-size:18px;">package com.xaut.zyq;

import java.util.Arrays;

//冒泡排序的具体思想和编程
/*
 * 冒泡排序一种交换排序,<span style="color:#ff6666;">它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为为止。</span>
 */
public class BubbleSort {

	public static void main(String[] args) {
		int a[] = { 9, 1, 5, 8, 3, 7, 4, 6, 2 };
		BubbleSort bs = new BubbleSort();
		System.out.println("冒泡排序后的数组:"
				+ Arrays.toString(bs.BubbleSortTest(a)).toString());
	}

	private int[] BubbleSortTest(int b[]) {
		int i, j;
		boolean flag = true;//flag用来做标记,若flag为true则退出循环
		for (i = 0; i < b.length && flag; i++) {// 遍历一遍最初的数组
			flag = false;
			for (j = b.length - 2; j >= i; j--) {// j是从后往前循环
				if (b[j] > b[j + 1]) {// 判断如果前者大于后者
					swap(b, j, j + 1);//交换b[j]和b[j+1]的值
					flag = true;
				}
			}
		}
		return b;
	}

	private void swap(int c[], int m, int n) {
		int temp = c[m];
		c[m] = c[n];
		c[n] = temp;
	}
	/* i=0的时候将1冒到最顶端
	 * [9, 1, 5, 8, 3, 7, 4, 6, 2]
	 * [9, 1, 5, 8, 3, 7, 4, 2, 6]
	 * [9, 1, 5, 8, 3, 7, 2, 4, 6]
	 * [9, 1, 5, 8, 3, 2, 7, 4, 6]
	 * [9, 1, 5, 8, 2, 3, 7, 4, 6]
	 * [9, 1, 5, 2, 8, 3, 7, 4, 6]
	 * [9, 1, 2, 5, 8, 3, 7, 4, 6]
	 * [1, 9, 2, 5, 8, 3, 7, 4, 6]
	 * i=1的时候将2冒泡到第二位置
	 * [1, 9, 2, 5, 8, 3, 7, 4, 6]
	 * [1, 9, 2, 5, 8, 3, 4, 7, 6]
	 * [1, 9, 2, 5, 3, 8, 4, 7, 6]
	 * [1, 9, 2, 3, 5, 8, 4, 7, 6]
	 * [1, 2, 9, 3, 5, 8, 4, 7, 6]
	 * i=2的时候将3冒泡到第三位置
	 * [1, 2, 9, 3, 5, 8, 4, 6, 7]
	 * [1, 2, 9, 3, 5, 4, 8, 6, 7]
	 * [1, 2, 9, 3, 4, 5, 8, 6, 7]
	 * [1, 2, 3, 9, 4, 5, 8, 6, 7]
	 * i=3的时候将4冒泡到第四位置
	 * [1, 2, 3, 9, 4, 5, 6, 8, 7]
	 * [1, 2, 3, 4, 9, 5, 6, 8, 7]
	 * i=4的时候将5冒泡到第五位置
	 * [1, 2, 3, 4, 9, 5, 6, 7, 8]
	 * [1, 2, 3, 4, 5, 9, 6, 7, 8]
	 * i=5的时候将6冒泡到第六位置
	 * [1, 2, 3, 4, 5, 6, 9, 7, 8]
	 * i=6的时候将7冒泡到第七位置
	 * [1, 2, 3, 4, 5, 6, 7, 9, 8]
	 * i=7的时候将8冒泡到第八位置
	 * [1, 2, 3, 4, 5, 6, 7, 8, 9]
	 * 从下往上一直冒泡,遍历一遍然后里面从下面往上遍历,相邻的两个比较,然后将比较小的冒上去
	 * 冒泡排序的复杂度:
	 * 分析一下它的时间复杂度。当最好的情况,也就是要排序的表本身就是有序的,那么我们比较次数,根据最后改进的代码,
	 * 可以推断出就是n-1次的比较,没有数据交换,时间复杂度为o(n).当最坏的情况,即待排序表是逆序的情况,此时需要比较
	 *<span style="color:#ff6600;"> n(n-1)/2次,并作等数量级的记录移动。因此,总的时间复杂度为o(n平方)</span>
    */
}</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值