【问题描述】

1.给定任意乱序整型数组,使用冒泡排序算法将其元素按照从小到大的顺序排列。

2.分析时间复杂度和空间复杂度。

3.说明冒泡排序的稳定性。

【问题解决】

1.冒泡排序实例代码:

public class BubbleSort {public static void main(String[] args) {int[] arr= {9,4,1,3,7,8,6,2,5};bubbleSort(arr);printIntArray(arr);}//冒泡排序static void bubbleSort(int[] arr) {for(int i=arr.length-1;i>0;i--)for (int j = 0; j < i; j++) {if(arr[j]>arr[j+1])swapIntArray(arr, j, j+1);}}//打印整型数组public static void printIntArray(int[] arr){for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.println();}//交换整型数组指定位置的元素public static void swapIntArray(int[] arr,int i,int j) {int temp = arr[i];arr[i]=arr[j];arr[j]=temp;}
}

执行结果:

1 2 3 4 5 6 7 8 9 

2.冒泡排序除了本身所使用的的固定空间以外,没有额外的开销,空间复杂度是。平均时间复杂度是,最好时间复杂度是,最坏时间复杂度是

3.向上述代码中添加打印语句,查看整个冒泡排序过程:

package algorithm;public class BubbleSort {public static void main(String[] args) {int[] arr= {9,4,3,1,3,7,8,6,2,5};bubbleSort(arr);printIntArray(arr);}//冒泡排序static void bubbleSort(int[] arr) {for(int i=arr.length-1;i>0;i--) {printIntArray(arr);System.out.println("第"+(arr.length-i)+"次排序:");for (int j = 0; j < i; j++) {if(arr[j]>arr[j+1]) {swapIntArray(arr, j, j+1);System.out.print("索引["+j+"]与["+(j+1)+"]即元素‘"+arr[j+1]+"’与‘"+arr[j]+"’交换:");printIntArray(arr);}}}}//打印整型数组public static void printIntArray(int[] arr){for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.println();}//交换整型数组指定位置的元素public static void swapIntArray(int[] arr,int i,int j) {int temp = arr[i];arr[i]=arr[j];arr[j]=temp;}
}

冒泡排序是针对相邻的元素且存在相对大小时才交换元素位置,对于大小相等的相邻元素,不会交换两者位置,因此,本次测试故意将两个相同的元素分开,从下列执行结果可以看出,原始数组的两个大小相同的元素“3”,在冒泡排序过程中没有交换其相对位置。通过观察下列排序过程,可以发现,两个大小相同的元素在排序过程中会相互靠近,一旦这两个大小相同的元素在排序过程中处于相邻位置,那么后续的排序操作就不会对该元素进行任何相对位置的改变。所以冒泡排序是稳定的。

9 4 3 1 3 7 8 6 2 5
第1次排序:
索引[0]与[1]即元素‘9’与‘4’交换:4 9 3 1 3 7 8 6 2 5
索引[1]与[2]即元素‘9’与‘3’交换:4 3 9 1 3 7 8 6 2 5
索引[2]与[3]即元素‘9’与‘1’交换:4 3 1 9 3 7 8 6 2 5
索引[3]与[4]即元素‘9’与‘3’交换:4 3 1 3 9 7 8 6 2 5
索引[4]与[5]即元素‘9’与‘7’交换:4 3 1 3 7 9 8 6 2 5
索引[5]与[6]即元素‘9’与‘8’交换:4 3 1 3 7 8 9 6 2 5
索引[6]与[7]即元素‘9’与‘6’交换:4 3 1 3 7 8 6 9 2 5
索引[7]与[8]即元素‘9’与‘2’交换:4 3 1 3 7 8 6 2 9 5
索引[8]与[9]即元素‘9’与‘5’交换:4 3 1 3 7 8 6 2 5 9
4 3 1 3 7 8 6 2 5 9
第2次排序:
索引[0]与[1]即元素‘4’与‘3’交换:3 4 1 3 7 8 6 2 5 9
索引[1]与[2]即元素‘4’与‘1’交换:3 1 4 3 7 8 6 2 5 9
索引[2]与[3]即元素‘4’与‘3’交换:3 1 3 4 7 8 6 2 5 9
索引[5]与[6]即元素‘8’与‘6’交换:3 1 3 4 7 6 8 2 5 9
索引[6]与[7]即元素‘8’与‘2’交换:3 1 3 4 7 6 2 8 5 9
索引[7]与[8]即元素‘8’与‘5’交换:3 1 3 4 7 6 2 5 8 9
3 1 3 4 7 6 2 5 8 9
第3次排序:
索引[0]与[1]即元素‘3’与‘1’交换:1 3 3 4 7 6 2 5 8 9
索引[4]与[5]即元素‘7’与‘6’交换:1 3 3 4 6 7 2 5 8 9
索引[5]与[6]即元素‘7’与‘2’交换:1 3 3 4 6 2 7 5 8 9
索引[6]与[7]即元素‘7’与‘5’交换:1 3 3 4 6 2 5 7 8 9
1 3 3 4 6 2 5 7 8 9
第4次排序:
索引[4]与[5]即元素‘6’与‘2’交换:1 3 3 4 2 6 5 7 8 9
索引[5]与[6]即元素‘6’与‘5’交换:1 3 3 4 2 5 6 7 8 9
1 3 3 4 2 5 6 7 8 9
第5次排序:
索引[3]与[4]即元素‘4’与‘2’交换:1 3 3 2 4 5 6 7 8 9
1 3 3 2 4 5 6 7 8 9
第6次排序:
索引[2]与[3]即元素‘3’与‘2’交换:1 3 2 3 4 5 6 7 8 9
1 3 2 3 4 5 6 7 8 9
第7次排序:
索引[1]与[2]即元素‘3’与‘2’交换:1 2 3 3 4 5 6 7 8 9
1 2 3 3 4 5 6 7 8 9
第8次排序:
1 2 3 3 4 5 6 7 8 9
第9次排序:
1 2 3 3 4 5 6 7 8 9 

冒泡排序及其稳定性介绍相关推荐

  1. 插入排序及其稳定性介绍

    [问题描述] 1.给定任意乱序整型数组,要求使用插入排序算法将其元素按照从小到大的顺序排列. 2.说明其时间复杂度和空间复杂度 3.分析其稳定性 [问题解决] 1.插入排序算法实现代码: packag ...

  2. Java排序算法——冒泡排序 及其稳定性和时间复杂度

    冒泡排序(Bubble Sort) 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来.走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成 ...

  3. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序

    第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...

  4. 各个排序算法的时间复杂度、稳定性、快排的原理以及图解

    目录 一.数据结构的八大排序算法总结笔记: 1.常见的数据结构排序算法如下图所示: 2.常见数据结构排序算法的时间复杂度.空间复杂度.稳定性介绍如下图所示: 二.排序算法逐一介绍: 1.直接插入排序: ...

  5. 十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

    文章目录 一.冒泡排序 1.1 冒泡排序基础[必会知识] 1.2 冒泡排序优化 1.2.1 外循环优化 1.2.2 内循环优化 1.2.3 双向遍历 1.3 冒泡排序的稳定性.复杂度和适用场景 1.3 ...

  6. 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航: 1. 稳定性 2 . 插入排序 3. 希尔排序 4. 选择排序 5. 堆排序 6 冒泡排序 1. 稳定性 两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法 ...

  7. 冒泡排序算法_PHP冒泡排序算法(一)

    ·点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 在前面的文章中,我们给大家介绍了PHP算法系列之<PHP随机取一算法>.今天我 ...

  8. 数据结构与算法之冒泡排序

    数据结构与算法之冒泡排序 目录 基本介绍 冒泡过程图解 代码实现 1. 基本介绍 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元 ...

  9. 冒泡排序--咕噜咕噜

    冒泡排序的基本介绍: 冒泡排序是简单的一种算法,它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果发现逆序则交换.走访元素的工作是重复地进行直到没有相邻元素需要交换,完成排序.这个算法的名字由 ...

  10. C语言——冒泡排序(分析详解)

    冒泡排序 文章目录 冒泡排序 排序算法的介绍 排序的分类 (1)内部排序: (2)外部排序法: [重点]冒泡排序 1.基本介绍 2.冒泡排序应用实例 3.分析冒泡的过程+代码 排序算法的介绍 排序也称 ...

最新文章

  1. MenuItem创建注意事项
  2. 使用vo注释做一个poi导出功能
  3. [Open Source]DrawKit - A cocoa framework for drawing
  4. 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
  5. Python基础——mysql数据库、SQLAlchemy
  6. 24. yii2 表单赋值 model-load(), model-attributes 方法
  7. silverlight 碰撞检测
  8. Scratch之自动走迷宫--左手法则
  9. python菜鸟教程 | if else 判断
  10. 云计算简史(完整版)
  11. 【总结】《牛腩》颗粒归仓篇
  12. 熔断机制什么意思_指数熔断机制是什么意思
  13. 盘点20款让你脑洞大开的AR技术应用
  14. Glide 显示圆形头像
  15. 拼多多API接口介绍
  16. 图片转换成语音怎么弄?这几个方法教给你
  17. python listdir 忽略 隐藏文件_忽略特殊文件
  18. 梦幻西游游戏官网服务器状态,梦幻西游:凌晨4点了,这个游戏究竟还有几个服务器不是鬼区?...
  19. 由Sensor光电转换效率和光谱功率分布曲线联想到的白平衡增益计算
  20. u盘打不开提示格式化怎么办?u盘恢复这样做

热门文章

  1. 6.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 的典型应用场景
  2. 57. web 攻击技术
  3. 31. Magento图片大小调整的相关代码
  4. 45. PHP 过滤器(Filter)
  5. 43. Element hasAttributes() 方法
  6. 17. Window confirm() 方法
  7. redis技术分享ppt_精美PPT制作培训 | 技术二部内部分享
  8. alpha冲刺-事后诸葛亮
  9. 洛谷 P2894 酒店 Hotel
  10. keepalived+nginx双机热备+负载均衡