冒泡排序

冒泡排序是一种简单的排序算法。

步骤:

  1. 遍历比较相邻的两个元素,被比较的左边元素大于右边元素,则交换位置。第一轮遍历、比较、交换完,最后一个是最大的元素
  2. 若本次遍历中没有数据交换,代表排序结束,提前退出
  3. 有数据交换则再从第一个元素开始遍历、比较、交换,排除最后一个元素
  4. 重复 1、2、3 步骤,每次排除上次被遍历的最后一个元素,直到排序完成

代码:

package constxiong.interview;/** * 冒泡排序 * @author ConstXiong */public class BubbleSort {public static void main(String[] args) {int [] array = {33, 22, 1, 4, 25, 88, 71, 4};bubbleSort(array);}/** * 冒泡排序 * @param array */public static void bubbleSort(int[] array) {print(array);for (int i = 0; i <array.length; i++) {//提前退出冒泡循环的标志boolean hasSwitch = false;//因为使用 j 和 j+1 的下标进行比较,所以 j 的最大值为数组长度 - 2for (int j = 0; j <array.length - (i+1); j++) {if (array[j] > array[j + 1]) {int temp = array[j + 1];array[j+1] = array[j];array[j] = temp;hasSwitch = true;//有数据交换print(array);}}//没有数据交换退出循环if (!hasSwitch) {break;}}}/** * 打印数组 * @param array */private static void print(int[] array) {for(int i : array) {System.out.print(i + " ");}System.out.println();}}

打印结果:

33 22 1 4 25 88 71 4 22 33 1 4 25 88 71 4 22 1 33 4 25 88 71 4 22 1 4 33 25 88 71 4 22 1 4 25 33 88 71 4 22 1 4 25 33 71 88 4 22 1 4 25 33 71 4 88 1 22 4 25 33 71 4 88 1 4 22 25 33 71 4 88 1 4 22 25 33 4 71 88 1 4 22 25 4 33 71 88 1 4 22 4 25 33 71 88 1 4 4 22 25 33 71 88 

特征:

  • 每一轮遍历中的数,最大的会被移动到最右边
  • 最好情况时间复杂度:O(n) 。即数组本身有序,如 1,2,3,4,5
  • 最坏情况时间复杂度:O(n2) 。即数组本身完全逆序,如 5,4,3,2,1
  • 平均情况下的时间复杂度是 O(n2)。最好情况下进行 0 次交换,最坏情况下进行 n*(n-1)/2 次交换,平均就是 n*(n-1)/2 次交换,比较操作肯定多于交换操作,上限 O(n2),不严格地推断,平均情况下的时间复杂度就是 O(n2)
  • 空间复杂度 O(1)。除了数组内存,只额外申请了一个 temp 变量。是一个原地排序算法。
  • 是稳定的排序算法。即代码示例中,第一个 4 和第二个 4,一定未发生位置变换。

给TA打赏
共{{data.count}}人
人已打赏
Java

如何进行复杂度分析?

2020-7-31 3:25:00

Java

使用递归输出某个目录下所有子目录和文件

2020-7-31 3:28:20

本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
⚠️
本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索