算法:四种冒泡排序(Bubble Sort)实现
背景
大学关于排序的算法,好像就学会了冒泡排序,这个算是排序界的 hello,world 了,冒泡排序的定义如下:
重复的遍历数组。
/// <summary>
/// 重复的遍历数组。
/// 每次遍历都比较两个元素,如果顺序不正确就把他们交换一下。
/// 如果遍历后只交换了 1 次或 0 次,排序结束。
/// 最多需要 length -1 次遍历,第 iterTimes 次需要遍历 length - iterTimes - 1 个元素。
/// </summary>
四种实现代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace DataStuctureStudy.Sorts
{
/// <summary>
/// 重复的遍历数组。
/// 每次遍历都比较两个元素,如果顺序不正确就把他们交换一下。
/// 如果遍历后只交换了 1 次或 0 次,排序结束。
/// 最多需要 length -1 次遍历,第 iterTimes 次需要遍历 length - iterTimes - 1 个元素。
/// </summary>
class BubbleSort<T>
where T : IComparable<T>
{
private static void Swap(T[] items, int left, int right)
{
if (left != right)
{
var temp = items[left];
items[left] = items[right];
items[right] = temp;
}
} public static void Sort1(T[] items)
{
if (items.Length < )
{
return;
} int swappedTimes;
do
{
swappedTimes = ;
// 重复的遍历数组。
for (var i = ; i < items.Length; i++)
{
// 每次遍历都比较两个元素,如果顺序不正确就把他们交换一下。
if (items[i - ].CompareTo(items[i]) > )
{
Swap(items, i - , i);
swappedTimes++;
}
}
} while (swappedTimes > );// 如果遍历后只交换了 1 次或 0 次,排序结束。
} public static void Sort2(T[] items)
{
if (items.Length < )
{
return;
} int swappedTimes;
do
{
swappedTimes = ;
int iterTimes = ; for (var i = ; i < items.Length - iterTimes; i++)
{
if (items[i - ].CompareTo(items[i]) > )
{
Swap(items, i - , i);
swappedTimes++;
}
}
iterTimes--;
} while (swappedTimes > );
} public static void Sort3(T[] items)
{
if (items.Length < )
{
return;
} for (var i = ; i < items.Length; i++)
{
int swappedTimes = ;
for (var j = ; j < items.Length - i + ; j++)
{
if (items[j - ].CompareTo(items[j]) > )
{
Swap(items, j - , j);
swappedTimes++;
}
} if (swappedTimes <= )
{
break;
}
}
} public static void Sort4(T[] items)
{
Sort4Helper(items, );
} private static void Sort4Helper(T[] items, int iterTimes)
{
if (items.Length < )
{
return;
} int swappedTimes = ;
for (var i = ; i < items.Length - iterTimes; i++)
{
if (items[i - ].CompareTo(items[i]) > )
{
Swap(items, i - , i);
swappedTimes++;
}
} if (swappedTimes <= )
{
return;
} Sort4Helper(items, iterTimes + );
}
}
}
备注
真不知道如何说,说明我对这些简单算法的理解还不够深入。
算法:四种冒泡排序(Bubble Sort)实现的更多相关文章
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- java排序算法之冒泡排序(Bubble Sort)
java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...
- 排序算法--冒泡排序(Bubble Sort)_C#程序实现
排序算法--冒泡排序(Bubble Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困 ...
- 【排序算法】冒泡排序(Bubble Sort)
0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2) 次交 ...
- 冒泡排序(Bubble Sort),比较次数优化改进
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- [算法] 冒泡排序 Bubble Sort
冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...
- 冒泡排序(Bubble Sort)
常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...
- php 冒泡 快速 选择 插入算法 四种基本算法
php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...
- 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...
随机推荐
- CCF CSP 201604-3 路径解析
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-3 路径解析 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中.文件系 ...
- poj1251 Jungle Roads(Prime || Kruskal)
题目链接 http://poj.org/problem?id=1251 题意 有n个村庄,村庄之间有道路连接,求一条最短的路径能够连接起所有村庄,输出这条最短路径的长度. 思路 最小生成树问题,使用普 ...
- thinkphp3.2开启静态缓存与缓存规则设置
网站的静态缓存对大访问量有很好的缓解作用,尤其对网站的大并发,可有效的缓解数据库的压力.在thinkphp中实现静态缓存很简单,thinkphp都已经封装好了直接调用即可. 静态缓存 首先设置 H ...
- 【原创】MHA对MySQL master Too many connections错误的处理机制
有台服务器故障期间的现象: 1. 可以正常ping通 2. telnet服务端口报Too many connections错误 3. ssh连接不上 查看MHA的管理日志,在强制关机前的health ...
- Tensorflow学习:(三)神经网络优化
一.完善常用概念和细节 1.神经元模型: 之前的神经元结构都采用线上的权重w直接乘以输入数据x,用数学表达式即,但这样的结构不够完善. 完善的结构需要加上偏置,并加上激励函数.用数学公式表示为:.其中 ...
- Chrome 无痕模式
Windows.Linux 或 Chrome 操作系统:按 Ctrl + Shift + n
- 深入理解ajax系列第四篇
前面的话 现代Web应用中频繁使用的一项功能就是表单数据的序列化,XMLHttpRequest 2级为此定义了FormData类型.FormData为序列化表单以及创建与表单格式相同的数据提供了便利. ...
- Redis 服务器命令
1.BGREWRITEAOF 异步执行一个 AOF(AppendOnly File) 文件重写操作 2.BGSAVE 在后台异步保存当前数据库的数据到磁盘 3.CLIENT KILL [ip:port ...
- wpf企业应用之主从结构列表
主从结构在企业级应用中相当常见,这里结合我的例子谈一下wpf中主从结构列表展示的常用做法,具体效果见 wpf企业级开发中的几种常见业务场景. 首先,Model有两种,主表对应model(假设为mode ...
- [POI2015]Odwiedziny
[POI2015]Odwiedziny 题目大意: 一棵\(n(n\le5\times10^4)\)个点的树,\(n\)次询问从一个点到另一个点的路径上,每次跳\(k\)个点,所经过的点权和. 思路: ...