- 思路
- 算法属性
- 代码(未优化)
- 代码(优化)
思路
冒泡排序是一种交换排序。(两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。)
冒泡排序就是要每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。
算法属性
排序类型 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 | 复杂性 |
交换排序 | 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;
}