Bubble Sort冒泡排序
冒泡排序是一种简单的排序算法. 它每次重复的访问过要排序的数列, 一次比较两个元素, 如果他们的顺错误, 就把他们交换过来.
下面这种图很清晰的解释了什么是冒泡算法.
具体算法描述如下:
1. 比较相邻的元素. 如果第一个比第二个大, 就交换他们两个.
2. 对每一对相邻元素作同样的工作, 从开始第一队到结尾的最后一对, 这样在最后的元素应该会是最大的数.
3. 针对所有的元素重复以上的步骤, 除了最后一个.
4. 重复步骤1-3, 直到排序完成.

我们来实现以下bubble sort
// int[] intList = new int[] { 2, -2, 6, 4, 5, 3, 7, 8, 11, 14 };
private void BubbleSort1(int[] intList)
{
var watch = new Stopwatch();
watch.Start();
var count = ;
for (int i = ; i < intList.Length; i++)
{
for (int j = ; j < intList.Length - - i; j++)
{
if (intList[j] > intList[j + ]) // 相邻元素两两对比
{
var temp = intList[j + ]; // 元素交换
intList[j + ] = intList[j];
intList[j] = temp;
}
count++; // 计算次数
}
}
watch.Stop();
var printOut = string.Empty;
foreach (var item in intList)
{
printOut += " " + item;
}
Console.WriteLine($"Result 1: {printOut}");
Console.WriteLine($"Count time: {count}");
Console.WriteLine($"Response time {watch.Elapsed.TotalMilliseconds.ToString()}ms");
}
以上是最简单的算法.
让我们对bubble sort做个改动已达成最优.
这里我们整理一下思路.
当数组有些数字已经排序好 (e.g. 4,5,6,7), 我们遍历比较一次就没有必要再去比较.
因此, 在排序过程中, 我们可能会重复的去多次比较已经排好的序列, 这样就造成了冗余, 当数据量大时, 会明显的耗时.
为解决这个问题, 我们在这里加一个lastIndex索引, 用于标记最后一次交换的位置.
rivate void BubbleSort2(int[] intList)
{ var watch = new Stopwatch();
watch.Start();
int i = intList.Length - ;
int count = ; // 计数
while (i > )
{
int lastChange = ; // 记录最后一次交换位置
for (int j = ; j < i; j++)
{
// 前面比后面大,则进行交换
if (intList[j] > intList[j + ])
{
intList[j] = intList[j] + intList[j + ];
intList[j + ] = intList[j] - intList[j + ];
intList[j] = intList[j] - intList[j + ];
lastChange = j; // 每交换一次更新一次
}
count++;
}
i = lastChange;
}
watch.Stop();
var printOut = string.Empty;
foreach (var item in intList)
{
printOut += " " + item;
}
Console.WriteLine($"Result 1: {printOut}");
Console.WriteLine($"Count time: {count}");
Console.WriteLine($"Response time {watch.Elapsed.TotalMilliseconds.ToString()}ms");
}
Bubble Sort冒泡排序的更多相关文章
- Bubble Sort 冒泡排序
//Bubble Sort ( O(n²)) public class TestBubbleSort { public int[] bubbleSortArray(int[] arr){ ; i &l ...
- c++算法联系,冒泡排序,bubble sort,插入排序,insert sort,
#include <iostream.h> #define MAX 100 void dispaly(int a[],int n) { for(int i=0;i<n;i+ ...
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- HDU 5775 Bubble Sort(冒泡排序)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 冒泡排序(Bubble Sort)
常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...
- [算法] 冒泡排序 Bubble Sort
冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...
- java排序算法之冒泡排序(Bubble Sort)
java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...
- 排序算法 (sorting algorithm)之 冒泡排序(bubble sort)
http://www.algolist.net/Algorithms/ https://docs.oracle.com/javase/tutorial/collections/algorithms/ ...
- 排序算法--冒泡排序(Bubble Sort)_C#程序实现
排序算法--冒泡排序(Bubble Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困 ...
随机推荐
- 6.2 C++ string类型字符串的连接
参考:http://www.weixueyuan.net/view/6391.html 总结: 对于string类型变量,我们可以直接用“+”或者“+=”进行字符串的连接,操作符非常方便. 用“+”风 ...
- GTX使用(更新中)
1.XILINX GTX介绍GTX是Virtex系列 FPGA上的低功耗吉比特收发器,在V6芯片上GTX工作带宽范围是750Mb/s到6.6Gb/s,支持收发双向,且收发双向独立.GTX接收和发送方向 ...
- 开发框架DevExtreme全新发布v18.2.6|附下载
DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...
- 100Mbps和100MB/s
作为毕业2年计算机专业的学生,现在才知道100Mbps和100MB/s的概念,实在是渣. Mbps=Mbit/s即兆比特每秒.Million bits per second的缩写传输速率是指设备的的数 ...
- 杭电多校第四场 E Matrix from Arrays
Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 ...
- mysql取差集、交集、并集
mysql取差集.交集.并集 博客分类: Mysql数据库 需求:从两个不同的结果集(一个是子集,一个是父集),字段为电话号码phone_number,找出父集中缺少的电话号码,以明确用户身份. 结合 ...
- MySQL Workbench将模型生成SQL文件出错
采用MySQL Workbench 设计好表和表关系后,从 File | Export 菜单中,选择 Forward Engineer SQL CREATE Script(正向引擎), 将我们的模型生 ...
- HDU 1796 How many integers can you find(容斥原理)
题目传送:http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=20918&pid=1002 Problem Description ...
- 【转载】Vue项目自动转换 px 为 rem,高保真还原设计图
前端开发中还原设计图的重要性毋庸置疑,目前来说应用最多的应该也还是使用rem.然而很多人依然还是处于刀耕火种的时代,要么自己去计算rem值,要么依靠编辑器安装插件转换. 而本文的目标就是通过一系列的配 ...
- python自定义异常抛出接受多个数值
在使用Python的时候,有时候想自己自定义异常错误,同时抛出多个参数,比如对数据库查找一条数据,如果没有找到,返回 {"errCode":"-1", &quo ...