微信扫一扫

028-83195727 , 15928970361
business@forhy.com

排序算法基础篇之宏观理论

2016-06-11

声明


    1、本系列中的排序算法特指计算机中的算法,不涉及其他领域的算法应用,敬请谅解。

    2、本篇只对排序算法进行理论上的粗浅解读,针对各个算法的具体实现将在后续的博客中一一展开,敬请期待。

    3、为简洁,该系列中出现的算法就是大家公认的排序算法的简称。

楔子

    为了长江后浪推前浪,走向新的人生巅峰,米老师带着我们轰轰烈烈的向着算法开战了。嗨,别说,世上无难事只怕有心人啊哈哈。


定义

    算法是一种思想,具体是为一个计算过程提供服务的。运行时,算法能从一个初始状态(例如一个无序的数组),经过一系列有限并且清晰的过程,最终产生一个结果并结束算法。

要素

运算和操作

    这部分主要包括算数运算符、逻辑运算符和关系运算符以及简单的I/O流。

控制结构

    囊括了现有的所有控制结构:顺序、选择和循环。

性质

有穷性Finiteness

    排序算法使用了循环结构,故必须在有限个步骤执行后停止,防止陷入死循环。

确切性Tangibility

    算法的每一步都必须有明确的使命或者定义。

数据输入输出I/O

    这部分可以分为输入项和输出项。算法的输入项可以有0个或多个输入项,0个输入项意味着算法本身定义了初始条件;算法的输出项有1个或者多个,没有输出的算法在常规上没有意义,只能验证算法的布尔值。

可行性 Feasibility

    或者可以说是算法的可分解性Decomposability,即算法可以被分为基本的可执行的步骤,并且每一个步骤都可以在有限时间内执行完成。  

分类

    按照相对于内存的数据量大小,可以将排序算法分为内部排序和外部排序。即可将需要进行排序的数据一次性存入内存中的排序称为内部排序;将不能将需要进行排序的数据一次性存入内存中的排序称为外部排序。

    虽然分为内外部排序,但是外部排序可以看做是多次进行的内部排序的集合,或者说是外部排序是内部排序的plus版本,就看大家怎么描述了。下面是一些具体的分类。

评定

    我们都知道针对统一到数学题,可能有好几种不同的解题方案,但是不同的方案的效率是截然不同的,正如算法。描述算法效率的称量标准一般是时间复杂度和空间复杂度。

时间复杂度

    顾名思义,时间复杂度就是执行算法至得到结果所需要的时间上的投入,同时也是算法从执行开始到得到结果所需要的计算量。我们规定时间复杂度是问题规模(需要进行排序的数据量)的函数:T(n)=f(n)。T(n)为时间复杂度、f(n)为函数表达式。

空间复杂度

    算法的空间复杂度是指该算法能够正常执行需要的最少的内存空间,同时间复杂度都用函数进行表示,不再赘述。

其他

    算法也是代码,因此衡量代码质量的标准同样适用于算法,诸如可读性、维护性、正确性、容错性(健壮性)等。
    下面附图一张转载来的图进行说明

方法

    尽管排序算法在宏观上有内外部之分,但是个人更愿意把外部算法看做是内部算法的升级版。故我个人将针对内部算法的分类归为排序算法的分类了。常见的算法大致可分为九种:1、冒泡;2、选择;3、插入(基础版和递归版);4、基数;5、归并;6、快速;7、堆;8、计数;9、桶这九种排序算法。这里只是列举具体的排序算法名称,后续博客将跟进具体的解读。

感悟

    思想再好,不去执行也是幻想。老师强调了算法好长时间了,不能再往后拖下去了。今日事今日毕!
感谢您的宝贵时间,祝您生活愉快~
                                     —joker