`
nlx0201
  • 浏览: 28796 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C#数据结构和算法学习系列四----基础排序算法

 
阅读更多

在计算机中实现存储数据最普遍的两种操作就是排序和查找。这是从计算机产业初始就已经确认的了。这意味着排序和查找也是计算机科学领域最值得研究的两种操作。这些简单算法就是插入排序算法、冒泡排序算法以及选择排序算法。这些算法的每一种都很容易理解和实现。对于任意情况而言这些算法不是最好的全面算法,但是对于少量数据集合或者其他特殊情况而言,它们是可用的最好算法。

1.冒泡排序。冒泡排序是可用的最慢排序算法之一,但是它也是最容易理解和实现的排序算法之一。这种排序算法的得名是由于数值“像气泡一样”从序列的一端浮动到另一端。假设现在要把一列数按升序方式进行排序,即较大数值浮动到列的右侧,而较小数值则浮动到列的左侧。这种效果可以通过下列操作来实现:多次遍历整个列,并且比较相邻的数值,如果左侧的数值大于右侧数值就进行交换

public void BubbleSort()
{
      int temp;
      for (int outer = upper; outer >= 1; outer--)
      {
            for (int inner = 0; inner <= outer - 1; inner++)
            {
                  if ((int)arr[inner] > arr[inner + 1])
                  {
                        emp = arr[inner];
                        arr[inner] = arr[inner + 1];
                        arr[inner + 1] = temp;
                  }
            }
      }
}

2.选择排序。这种排序是从数组的起始处开始,把第一个元素与数组中其他元素进行比较。然后,将最小的元素放置在第0 个位置上,接着再从第1 个位置开始再次进行排序操作。这种操作会一直到除最后一个元素外的每一个元素都作为新循环的起始点操作过后才终止。在选择排序算法中使用了两层循环。外层循环从数组的第一个元素移动到数组最后一个元素之前的元素,而内层循环则从数组的第二个元素移动到数组的最后一个元素,并且查找比当前外层循环所指元素更小的数值。在内循环遍历一遍之后,就会把数组内最小值赋值到数组中合适的位置上。

public void SelectionSort()
{  
      int min, temp;
      for (int outer = 0; outer <= upper; outer++)
      {
            min = outer;
            for (int inner = outer + 1; inner <= upper; inner++)
            {
                  if (arr[inner] < arr[min]) min = inner;
            }
            temp = arr[outer];
            arr[outer] = arr[min];
            arr[min] = temp;
      }
}

3.插入排序.插入排序算法类似于人们通常按照数字顺序或者字母顺序进行排序的方法。假如我要求全班同学上交填有本人姓名、学号以及简短自我介绍的索引卡片。而学生们交回来的卡片是随机.排列的。如果要把卡片按照字母排序排列,就可以构建出一张座次表了。插入排序算法有两层循环。外层循环会逐个遍历数组元素,而内层循环则会把外层循环所选择的元素与该元素在数组内的下一个元素进行比较。如果外层循环选择的元素小于内层循环选择的元素,那么数组元素都向右移以便为内层循环元素留出位置。

public void InsertionSort()
{
      int inner, temp;
      for (int outer = 1; outer <= upper; outer++)
      {
            temp = arr[outer];
            inner = outer;
            while (inner > 0 && arr[inner - 1] >= temp)
            {
                  arr[inner] = arr[inner - 1];
                  inner -= 1;
            }
            arr[inner] = temp;
      }
}
上述三种排序算法在复杂度和理论上都是十分相似的,所以在互相进行比较的时候应该操作近似。(测试方法略)选择排序和冒泡排序的执行效率相等,而插入排序的速度则是其他两种算法速度的一半(或者说是比其他算法慢两倍的时间)。当数组元素量为1000 时,选择排序比冒泡排序快了100多倍,而且选择排序比插入排序快了200 多倍。当数组元素量增加到10000 个的时候,确实能看出数组大小对三种排序算法的影响。尽管选择排序始终比其他两种算法快出许多倍,但是所有这三种排序算法的性能还是相当低的。准确地说,这些算法没有一种在对庞大数据集合进行排序时是理想选择。但是存在能高效处理庞大数据集合的排序算法。

分享到:
评论

相关推荐

    C#算法和数据结构学习

    其中包括了线性表、栈和队列、串和数组、树和图等数据结构的操作、排序等,非常适合进阶级的朋友学习.其中需要的预备知识数学中的集合、对数、递归等的回顾,还有C#语法中的接口和泛型的温习,从而更快的接受数据...

    数据结构(C#版)很难得的C#进一步学习的资料

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    c#数据结构daquan

    c#数据结构 性质:是计算机学科的一门专业基础课。 目的:在于学习如何组织和表示数据,并在相应的数据结构上实现对数据的操作。 基本任务: 是学习常见的基本数据结构,包括线性表、栈和队列、数组和字符串、树、...

    数据结构算法

    第二天 平衡二叉树 6天通吃树结构—— 第一天 二叉查找树 算法速成系列(15)算法系列15天速成——第十五天 图【下】(大结局) 算法系列15天速成——第十四天 图【上】 算法系列15天速成——第十三天 树操作【下】 ...

    数据结构(算法)

    非常全面的数据结构教材,适合吃c,c++,c#等软件开发学习使用。 算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映...

    10个C#经典算法与数据结构例子

    算法和数据结构在计算机科学中具有极其重要的地位,它们是构建高效、可靠和可维护软件的关键。以下是关于算法和数据结构重要性的一些简要说明: 提高程序效率:合理选择和使用数据结构可以显著提高程序的执行效率。...

    数据结构 C#实现 各种算法 线性表,树,单链表

    数据结构 看别人都没人写C#的数据结构使我们在学习数据结构时多有不便, 前天好友传来一份他朋友(据说是个大学教授)写的本数据结构 就来和好友一起分享!!

    数据结构(C#语言版)

    本书分为 8 章,第 1 章介绍了数据结构和算法的基本概念及本书用到的数学和 C#的知 识;第 2 章至第 6 章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的 数据结构及其应用,以及在.NET 框架中相应...

    c#数据结构(很少下到的资料)

    编者在写这本书时遇到了两个问题...本书所有的数据结构和算法都是用C#语言进行描述,并在相应章节的末尾介绍了在.NET框架中常用的数据结构和算法。用C#在.NET平台开发的技术人员可以从本书中获得许多有益的知识和技术。

    C#排序算法大全

    本人用了C#开发出冒泡排序算法。希望能为C#语言的学习者带来一些益处。不要忘了,学语言要花大力气学数据结构和算法。 using System; namespace BubbleSorter { public class BubbleSorter { public void Sort...

    DataStructureAndAlgorithmsInCSharp:使用C#的常见数据结构和算法实现

    使用C#的通用数据结构和算法实现 前言 使用C#来实现数据结构和算法似乎是多余的,因为C#提供了开发人员所需的一切,使他们可以专注于应用程序层。 尽管C#不是研究和解释数据结构和算法的最佳选择,但它完全能够...

    C#排序经典算法大全

    实现C#中的排序,使用一些常见的算法。希望能为c#语言的学习者带来一些益处。不要忘了,学语言要花大力气学数据结构和算法。

    算法与数据结构入门基础1

    算法与数据结构入门基础第一章:当我们在讨论算法的时候,我们在讨论什么?我们究竟为什么要学习算法 1-2 课程介绍第二章:排序基础 2-1 选择排序法 2-2 使

    数据结构(c#版)各种排序算法例子

    这个程序详细列举了,插入排序、带哨兵的插入排序、希尔排序、选择排序、冒泡排序等多种排序,供大家学习参考

    3.数据结构(C#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    30.数据结构(C#语言版)高清版

    1.1.1 学习数据结构的必要性...1 1.1.2 基本概念和术语...............1 1.2 算法...4 1.2.1算法的特性............................4 1.2.2算法的评价标准....................5 1.2.3算法的时间复杂度...............

    数据结构(C#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    c#选择排序法 冒泡排序法 插入排序法 3种排序法

    本人用了C#开发出选择排序法 ,冒泡排序法 ,插入排序法算法。希望能为C#语言的学习者带来一些益处。不要忘了,学语言要花大力气学数据结构和算法。

    数据结构(c#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构(C#语言版).

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

Global site tag (gtag.js) - Google Analytics