数据结构与算法 - 排序 1. 冒泡排序
每天写点数据结构与算法, 今天的算法是排序, 第一种也是最简单的排序算法: 冒泡排序.直接上代码, 思路看注释.加上了对冒泡排序的优化.
复制代码
空间复杂度: O(1), 因为是就地排序;
时间复杂度: O(n^2) <-- 平均时间复杂度
版权声明: 本文为 InfoQ 作者【小马哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/d66c346c725fd3ee39473ab0b】。文章转载请联系作者。
每天写点数据结构与算法, 今天的算法是排序, 第一种也是最简单的排序算法: 冒泡排序.直接上代码, 思路看注释.加上了对冒泡排序的优化.
public class BubbleSort {
/**
* 执行冒泡排序
* @param arrays 待排序数组
* @param order 正序or逆序
* @return
*/
public static int[] sort(int[] arrays, boolean order) {
// 1, 特殊情况, 数组的长度小于等于1, 没有必要排序, 直接返回
if (arrays.length <= 1) {
return arrays;
}
// 2, 根据order确定是正序, 还是倒序拍你
int flag = order ? 1 : -1;
// 3, 数据交换标志位
boolean change = false;
int temp = 0;
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays.length - i - 1; j++) {
if (flag * (arrays[j] - arrays[j + 1]) > 0) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
change = true;
}
}
// 优化, 如果没有数据交换, 则提前退出
if (!change) {
break;
}
}
return arrays;
}
/**
* 执行冒泡排序 重载方法 默认执行正序排序
* @param arrays 待排序数组
* @return
*/
public static int[] sort(int[] arrays) {
return sort(arrays, true);
}
}
空间复杂度: O(1), 因为是就地排序;
时间复杂度: O(n^2) <-- 平均时间复杂度
版权声明: 本文为 InfoQ 作者【小马哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/d66c346c725fd3ee39473ab0b】。文章转载请联系作者。
自强不息,厚德载物 2018.12.22 加入
像一棵竹子那样, 不断的扎根积累, 活出节节高的人生!
促进软件开发及相关领域知识与创新的传播
评论