1.介绍

冒泡排序的基本思想就是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底的气泡一样逐渐向上冒泡。

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下
来没有进行过交换,就说明序列有序,因此要在排序过程中设置
一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)

时间复杂度:O(n^2)  

2.图解

3.代码实现

using System;

namespace DataStructure
{
public class BubbleSort
{
/// <summary>
/// 测试
/// </summary>
public static void Test()
{
int[] arr = { , , -, , }; Console.WriteLine("排序的数组:" + ArrayToString(arr)); Console.WriteLine("\n优化后的数组排序"); Sort(arr); Console.WriteLine("\n优化前的数组排序"); arr = new int[] { , , -, , }; for (int i = ; i < arr.Length - - ; i++)
{
int temp = ; if (arr[i] > arr[i + ])
{
temp = arr[i]; arr[i] = arr[i + ]; arr[i + ] = temp;
}
} System.Console.WriteLine("\n第一次排序的结果:" + ArrayToString(arr)); for (int i = ; i < arr.Length - - ; i++)
{
int temp = ; if (arr[i] > arr[i + ])
{
temp = arr[i]; arr[i] = arr[i + ]; arr[i + ] = temp;
}
}
System.Console.WriteLine("\n第二次排序的结果:" + ArrayToString(arr)); for (int i = ; i < arr.Length - - ; i++)
{
int temp = ; if (arr[i] > arr[i + ])
{
temp = arr[i]; arr[i] = arr[i + ]; arr[i + ] = temp;
}
}
System.Console.WriteLine("\n第三次排序的结果:" + ArrayToString(arr)); for (int i = ; i < arr.Length - - ; i++)
{
int temp = ; if (arr[i] > arr[i + ])
{
temp = arr[i]; arr[i] = arr[i + ]; arr[i + ] = temp;
}
}
System.Console.WriteLine("\n第四次排序的结果:" + ArrayToString(arr));
} /// <summary>
/// 将数组转换成String
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public static string ArrayToString(int[] arr)
{ string result = ""; for (int i = ; i < arr.Length; i++)
{
result += arr[i] + ",";
} return result;
}
/// <summary>
/// 排序算法优化并封装
/// </summary>
/// <param name="arr"></param>
public static void Sort(int[] arr)
{
//标识标量,表示是否被交换过
bool flag = false; //临时变量
int temp = ; //要排序的次数,arr.Length-1
for (int i = ; i < arr.Length; i++)
{
//第几次排序
for (int j = ; j < arr.Length - i; j++)
{
//如果前面的数大于后面的数,则交换
if (arr[j] > arr[j + ])
{
flag = true; temp = arr[j]; arr[j] = arr[j + ]; arr[j + ] = temp;
}
}
//每次排序的结果
System.Console.WriteLine("\n第" + i + "次排序的结果:" + ArrayToString(arr)); if (!flag) break; //在一趟排序中,一次交换都没有发生过 else flag = false; //重置flag进行下次判断 }
}
}
}

4.结果图

C#数据结构与算法系列(十八):冒泡排序算法(BubbleSort)的更多相关文章

  1. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】

    <Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  2. 学习ASP.NET Core Razor 编程系列十八——并发解决方案

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. 为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》

    大家好,我是咔咔 不期速成,日拱一卒 之前ElasticSearch系列文章中提到了如何处理空值,若为Null则会直接报错,因为在ElasticSearch中当字段值为null时.空数组.null值数 ...

  4. 数据结构与算法系列----最小生成树(Prim算法&amp;Kruskal算法)

     一:Prim算法       1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...

  5. 排序算法系列:选择排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)

    在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 从数组头元素索引i开始,寻找后面最小的值(比i位 ...

  6. C#数据结构与算法系列(八):栈(Stack)

    1.介绍 栈是一个先入后出(FILO-First In Last Out)的有序列表 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的特殊线性表.允许插入和删除的一端,为变化的一端,称为栈顶 ...

  7. BizTalk开发系列(十八) 使用信封拆分数据库消息

    之前写了一篇的<BizTalk开发系列(十七) 信封架构(Envelop)> 是关于信封架构及其拆装原理的,都是理论性的内容.信封在BizTalk开发过程中最常用的应该是在读取SQL Se ...

  8. SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。

    本文是在学习https://blog.csdn.net/housisong/article/details/1452249一文的基础上对算法的理解和重新整理,再次非常感谢原文作者的深入分析以及分享. ...

  9. WPF入门教程系列十八——WPF中的数据绑定(四)

    六.排序 如果想以特定的方式对数据进行排序,可以绑定到 CollectionViewSource,而不是直接绑定到 ObjectDataProvider.CollectionViewSource 则会 ...

  10. Storm系列(十八)事务介绍

    功能:将多个tuple组合成为一个批次,并保障每个批次的tuple被且仅被处理一次. storm事务处理中,把一个批次的tuple的处理分为两个阶段processing和commit阶段. proce ...

随机推荐

  1. Nessus静态ip配置及内网扫描

    环境ubuntu虚拟机,以前linux配置ip都是从/etc/network/interfaces这里面更改,现在要在/etc/netplan下面配置. vim /etc/netplan/01-net ...

  2. Beta冲刺 —— 5.28

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.组员一起学习Git分支管 ...

  3. 字符串去除空格的方式(用replace()实现)

    去除所有空格: str = str.replace(/\s+/g,""); 去除两头空格: str = str.replace(/^\s+|\s+$/g,"") ...

  4. WALT(Window Assisted Load Tracking)学习

    QCOM平台使用WALT(Window Assisted Load Tracking)作为CPU load tracking的方法:相对地,ARM使用的是PELT(Per-Entity Load Tr ...

  5. Java实现 LeetCode 837 新21点(DP)

    837. 新21点 爱丽丝参与一个大致基于纸牌游戏 "21点" 规则的游戏,描述如下: 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字. 抽取时,她从 [1, W] 的范 ...

  6. java实现国庆星期日

    ** 国庆星期日** 1949年的国庆节(10月1日)是星期六. 今年(2012)的国庆节是星期一. 那么,从建国到现在,有几次国庆节正好是星期日呢? 只要答案,不限手段! 可以用windows日历, ...

  7. java代码(12) ---CollectionUtils工具类

    CollectionUtils工具类 CollectionUtils工具类是在apache下的,而不是springframework下的CollectionUtils 个人觉得在真实项目中Collec ...

  8. Pipeline 脚本调用 mvn 命令失败

    问题描述 jenkins构建job时 提示mvn 未找到命令 + export JAVA_HOME=/home/tools/jdk1.8.0_221 + JAVA_HOME=/home/tools/j ...

  9. 利用BeanMap进行对象与Map的相互转换

    javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b ...

  10. 0.大话Spring Cloud

    天天说Spring cloud ,那到底它是什么? 定义 它不是云计算解决方案 它是一种微服务开发框架 它是(快速构建分布式系统的通用模式的)工具集 它基于Spring boot 构建开发 它是云原生 ...