冒泡排序
介绍
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小或者最大的元素会经由交换慢慢"浮"到数列的顶端。
算法执行步骤
- 两两之间互相比较,如果第一个比第二个大,就交换他们两个;
- 一直循环往复,从刚开始一直到最后,遍历完之后,最后的元素会成为最大的数;
- 然后重复上面的两个步骤,直到没有任何一对数据可以比较。
代码实现
/**
* 冒泡排序
* @author le
*/
public class BubbleSort {
public static void main(String[] args) {
// 待排序的数组
int[] nums = {1, 56, 8, 9, 65, 88,10};
// 外面一层遍历 用来限制循环的次数 也就是 只会遍历到数组倒数第二个结点
for (int i = 0;i < nums.length - 1;i++){
// 优化
// 设定一个标记 若为true 则表示此次循环没有交换
boolean flag = true;
// 在外层的控制下 开始循环遍历 比较
// 注意 num.length - i - 1
// num.length - i 表示已经排序好了末尾的 i 个数据了
// -1 是为了避免数组越界
for (int j = 0;j < nums.length - i - 1;j++){
int temp;
// 两两比较 如果后者比前者大 就交换
if (nums[j] < nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
flag = false;
}
}
if (flag){
break;
}
}
// 遍历排序后的结果
for (int num : nums) {
System.out.println(num);
}
}
}
总结
冒泡排序是一种稳定的排序,关键是就在于每次循环遍历了中的两次比较,改进之后,每次遍历后的最大值,次大值,等等会固定在右侧,避免了重复比较。
时间复杂度:O(n*n)
空间复杂度:O(1)