什么是排序
从字面上理解,排序的过程就是把无序变成有序的过程。从应用来说,可以分三个层次理解:
①整数排序,这是所有程序员刚接触排序算法时的直观感受,输入一些随机整数,然后将其排序后输出出来。
②关键字排序,用过Excel排序的人对此应该不陌生,我们可以根据不同的关键字对数据记录进行排序,还可以有排序主字段和二级字段等概念。
③按要求排序,这是广义上的排序方法,举个例子,我们在玩儿某些扑克牌游戏时,三张4是大于两张5的,这个时候要求我们按照元素个数排序,即多的放前面。
排序中的基本操作
排序中用到的最多的操作肯定是比较大小,还有就是交换两个原始的位置。这些基本操作经常被用来分析排序算法的时间复杂度。
排序算法的分类
按照不同的分类标准,排序算法有不同的分类
①是否稳定,即如果排序关键字的值相同,排序前后这两条记录的相对位置是否会发生改变。这一性质在多关键字排序中非常重要,如果排序算法不稳定,那就无法应用到多关键字排序中。
②涉及的存储器类型,一般排序算法都是在内存中进行的,即所有待排序记录已经读到内存中了,这样的排序算法称为内部排序。接下来的分类标准全部是在内部排序前提下进行的。但是,数据量非常大时,内存无法一次存储所有数据,我们要分批读入外存中的数据然后排序,这样的排序方法称为外部排序。
③依据原则,根据排序算法依据的原则,可以将排序分为插入排序、交换排序、选择排序、归并排序和计数排序几种类型。
④时间复杂度,按照排序算法的时间复杂度可以将其分为简单排序(O(n^2)),先进排序(O(nlogn)),基数排序(O(d*n))。
⑤代排序记录的数据结构,一般排序记录的数据结构有三种:第一种是简单的顺序存储,记录本身放在一个数组中。要排序就必须交换数组元素的位置。第二种是静态链表,记录间靠指针连接,排序的过程不需要改变链表结点位置,只需要改变指针指向即可。第三种是指针数组,记录本身随意存储,而将其地址存放于一个数组中,通过对指针数组排序,间接得到记录的有序集合。
最后说明:没有最好的排序算法,只有合适的排序思想。
排序算法多种多样,没有哪一种算法可以完美解决所有问题。之所以有这么多的分类标准,就是要求我们根据实际问题来选择最合适的算法。另一方面,学习排序算法并不仅仅是为了排序,网络中和书上有所有算法的现成代码,我们要掌握的是排序算法解决问题的思路,而不是去背这些代码。