Carson带你学数据结构:图文详解冒泡排序 & 优化
Posted Carson带你学Android
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Carson带你学数据结构:图文详解冒泡排序 & 优化相关的知识,希望对你有一定的参考价值。
前言
本文主要讲解排序算法中最简单的冒泡排序算法,希望你们会喜欢。
目录
1. 简介
属于 内排序算法中 的 交换排序类别
2. 算法思想
- 自下而上对 相邻的2个数依次 比较 & 调整
- 若 反序 则交换,直到 无反序的记录 为止。
较大的数往下沉,较小的数类似气泡一样往上冒,故称:冒泡排序
3. 算法示意图
整个过程就跟冒泡一样,最小值一直往上“冒泡”,具体如下:
a. 2与6对比:因2<6,所以交换位置
b. 2与4对比:因2<4,所以交换位置
c. 2与7对比:因2<7,所以交换位置
以此类推,最终将序列中最小值放到了首位(冒上来了)
4. 算法实现
4.1 具体代码
具体请看注释
public class BubbleSort
/**
* 基本的 冒泡排序
*/
public static void bubbleSort(int[] srcArray)
int i,j; // 用于存放数组下标
int temp = 0; // 用于交换数值时临时存放值
for(i=0;i<srcArray.length-1;i++)
// j 从后往前循环
for(j=srcArray.length-2;j>=i;j--)
// 若前者>后者,则交换位置
if(srcArray[j]>srcArray[j+1])
temp=srcArray[j];
srcArray[j]=srcArray[j+1];
srcArray[j+1]=temp;
// 输出排序后的序列
for(int a =0;a<srcArray.length;a++)
System.out.println(srcArray[a]);
/**
* 执行 冒泡排序
*/
public static void main(String[] args)
// 定义待排序数列
int[] src = new int[]9, 1, 5, 8, 3, 7, 4, 2, 6;
// 输出结果
bubbleSort(src);
4.2 算法示意图
- 当 i =0时,算法示意图如下:
- 当 i =1时,算法示意图如下:
- i = 2、3、4依次类推…
4.3 最终测试结果
1
2
3
4
5
6
7
8
9
Demo
地址
Carson_Ho的Github地址:冒泡排序
5. 算法优化
- 简介
- 具体实现
public class BubbleSort
/**
* 优化的 冒泡排序
*/
public static void bubbleSortOpti(int[] srcArray)
int i,j; // 用于存放数组下标
int temp = 0; // 用于交换数值时临时存放值
// 标记位
// flag = true:代表存在数据交换,即序列仍需排序,需继续循环
// flag = false:代表不存在数据交换,即序列不需排序,已经是有序序列了,可停止循环
Boolean flag = true;
// 若flag = false时退出循环
for(i=0;i<srcArray.length-1 && flag;i++)
flag = false; // 初始化为false
// j 从后往前循环
for(j=srcArray.length-2;j>=i;j--)
// 若前者>后者,则交换位置
if(srcArray[j]>srcArray[j+1])
temp=srcArray[j];
srcArray[j]=srcArray[j+1];
srcArray[j+1]=temp;
flag = true; // 若有数据交换,则说明序列仍未无序
// 输出排序后的序列
for(int a =0;a<srcArray.length;a++)
System.out.println(srcArray[a]);
/**
* 执行 优化后的冒泡排序
*/
public static void main(String[] args)
// 定义待排序数列
int[] src = new int[]2, 1, 3, 4, 5, 6, 7, 8, 9;
// 输出结果
bubbleSortOpti(src);
6. 性能分析
以下将分析算法的性能:时间复杂度、空间复杂度、稳定性
7. 总结
- 本文主要讲解了 排序算法中 的冒泡排序
- 下面我将继续讲解 数据结构,有兴趣可以继续关注Carson_Ho的安卓开发笔记
以上是关于Carson带你学数据结构:图文详解冒泡排序 & 优化的主要内容,如果未能解决你的问题,请参考以下文章