冒泡排序(java实现)

  • 思路
  • 算法属性
  • 代码(未优化)
  • 代码(优化)

思路

冒泡排序是一种交换排序。(两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。)
冒泡排序就是要每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。

算法属性

排序类型时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性复杂性
交换排序O(N^2)O(N^2)O(N)O(1)稳定简单

代码(未优化)

public static int[] bubbleSort(int[] inputList) {
	int size = inputList.length;
	if (size == 0) {
		return inputList;
	}
	for (int i = 0; i < size - 1; i++) {
		for (int j = 0; j < size - 1; j++) {
			if (inputList[j] > inputList[j + 1]) {//如果前一项比后一项大,就调换顺序
				int tem = inputList[j];
				inputList[j] = inputList[j + 1];
				inputList[j + 1] = tem;
			}
		}
	}
	return inputList;
}

代码(优化)

  • 第二层循环,判断条件可以改为size-i-1,因为每次循环保证最大的移到了最后边,下一次只需要比较前n-i项就可以了
  • 添加标志位,如果第二层循环内没有发生交换,说明已经排好了,直接返回
public static int[] bubbleSort(int[] inputList) {
	int size = inputList.length;
	if (size == 0) {
		return inputList;
	}
	for (int i = 0; i < size - 1; i++) {
		boolean flag = false;//标志位判断是否已经排好序
		for (int j = 0; j < size - i - 1; j++) {
			if (inputList[j] > inputList[j + 1]) {//如果前一项比后一项大,就调换顺序
				int tem = inputList[j];
				inputList[j] = inputList[j + 1];
				inputList[j + 1] = tem;
				flag = true;
			}
		}
		if (!flag)//排好序直接返回
			return inputList;
	}
	return inputList;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值