背景

大学关于排序的算法,好像就学会了冒泡排序,这个算是排序界的 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)实现的更多相关文章

  1. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  2. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  3. 排序算法--冒泡排序(Bubble Sort)_C#程序实现

    排序算法--冒泡排序(Bubble Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困 ...

  4. 【排序算法】冒泡排序(Bubble Sort)

    0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2)  次交 ...

  5. 冒泡排序(Bubble Sort),比较次数优化改进

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. [算法] 冒泡排序 Bubble Sort

    冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...

  7. 冒泡排序(Bubble Sort)

    常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...

  8. php 冒泡 快速 选择 插入算法 四种基本算法

    php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...

  9. 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法

    申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...

随机推荐

  1. 配置JDK-Java运行环境

    1.将Java安装包上传到服务器某目录,如E:\jdk-7u45-windows-x64.exe 2.上传后运行jdk-7u45-windows-x64.exe 3.点击[下一步],后选择[更改],改 ...

  2. Kaldi 安装

    以后要重点搞caldi了,虽然集群上有,但还是本地安装一下吧. 参考   Kaldi 学习手记(一):Kaldi 的编译安装   在 ubuntu 下安装 kaldi 基本步骤 两个文章基本差不多 1 ...

  3. Loadrunner11在win7下录制脚本,ie打不开

    Loadrunner11在win7下录制脚本,ie打不开 使用loadrunner11录制脚本时试了很多办法都无法打开ie浏览器,最后终于解决了 1.ie浏览器去掉启用第三方浏览器扩展 2.loadr ...

  4. scala递归实现换零钱算法

    import scala.collection.mutable.ArrayBuffer import scala.util.control.Breaks object Exchange { def d ...

  5. Spring技术内幕:设计理念和整体架构概述(转)

    程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...

  6. 美团外卖Android Crash治理之路

    Crash率是衡量一个App好坏的重要指标之一,如果你忽略了它的存在,它就会愈演愈烈,最后造成大量用户的流失,进而给公司带来无法估量的损失.本文讲述美团外卖Android客户端团队在将App的Cras ...

  7. 【SQL】182. Duplicate Emails

    Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...

  8. dSploitzANTI渗透教程之HTTP服务重定向地址

    dSploitzANTI渗透教程之HTTP服务重定向地址 HTTP服务 HTTP服务主要用于重定向地址的.当用户创建一个钓鱼网站时,可以通过使用HTTP服务指定,并通过实施中间人攻击,使客户端访问该钓 ...

  9. [ 转载 ]学习笔记-深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...

  10. Django ORM训练专题

    图书信息系统 表结构设计 # 书 class Book(models.Model): title = models.CharField(max_length=32) publish_date = mo ...