• 算法与数据结构——排序(一)概述


          最近在学习《大话数据结构》这本书,以前总是以为看懂了就以为自己明白,其实不然,等到真正叫把书本关上,要自己来写的时候,发现自己还是不会,所以在这次学习的过程中,为了达到比较好的效果,每次理解了某个算法之后,就关上书,自己来实现一遍,并且把每个算法的思路用自己的话总结出来。以此来加深自己的理解,接下来的一系列都是我在学习《大话数据结构》这本书时的笔记。之所以记录下来,一时为了加深我自己的印象,二是为了使自己养成善于总结的好习惯。因为这些内容是自己学习的一些笔记,所以在里面有很多例子都是使用的《大话数据结构》这本书上面的,请大家不要见怪。另外,其他的一些内容属于我个人的理解,如果有错误,还请大家批评指正。

         补充一句,《大话数据结构》这本书确实不错,强烈推荐!!!

         好了,闲话少说,直接入正题了。在正式学习排序之前,有一些概念我们需要理解。排序我们就不用解释了,大家都明白。排序分为两类,一种是稳定排序,另外一种是不稳定排序。什么是稳定排序呢,排序一般可以按照不同的关键字进行,比如按照关键字A,张三是排在李四前面的,而如果按照关键字B排序,张三和李四是一样的。这个时候,如果最终的结果是张三在前面,李四在后面,那么就是稳定的排序,如果张三在后面,李四在前面,那么就是不稳定的。再具体一点的例子,如果我在班上的总分成绩排名在你前面,就算我们的四级分数是一样的,最后的名次我还是在你前面,那么这就叫稳定的排序,否则就是不稳定的。

         排序按照另外一种分法可以分为内排序和外排序。内排序也就是数据比较少的时候,数字都加载到内存中去,在内存中进行的排序。外排序就是数据量非常多,每次只能加载一部分到内存中去排序,排完了之后,再从外存上加载一部分进去,它需要在内外存之间进行多次交换。

    在后面学习中介绍的的都是内排序的一些算法。

         对于内排序来说,影响算法性能的关键因素有三个,一是时间,二是空间,三是算法本身的复杂度。

         时间:对于排序算法来说,时间开销是衡量它好坏的重要因素。一般排序都涉及到比较和移动两种操作。比较就是比较两个数的大小,移动就是把两个数的位置进行交换。高效率的算法应该具有较少的比较次数和较少的移动次数。

         空间,这里的空间指的是辅助空间。也就是除了装需要排序的数之外所需要的空间。这些空间一般在排序的过程中可以用到,有的时候,可以用空间来减少时间的消耗。它们之间可以相互转换,所以空间也是衡量算法好坏的一个重要因素。

         算法本身的复杂性:这里也就是从算法本身出发来说的,看你这个算法设计的合不合理,思路复不复杂。

         上面就是在学习排序算法之前,应该了解的一些内容。接下来,我将依次实现几种常见的算法。整个系列的学习将会介绍8种算法,分别是冒泡,选择,插入,希尔,归并,堆排序,快速排序,基数排序。

  • 相关阅读:
    SAXParseException;前言中不允许有内容的错误
    FATAL Alert:BAD_CERTIFICATE
    DB2的递归
    在Unity中针对屏幕自适应,我们该如何做呢?
    原码与反码的区别?
    在Unity 3D中加入Image图片
    你的外接键盘的小键盘在Num Lock键亮着的,但是数字按了不能用,解决办法在这里
    唯美英文(一)
    如何使用gcc编译器
    C++中const的用法
  • 原文地址:https://www.cnblogs.com/xiaoxiangfeizi/p/2740535.html
Copyright © 2020-2023  润新知