排序,顾名思义,就是将一组无序的数据按照指定的顺序(一般是从大到小或从小到大)进行排列的过程。不管是在Java还是在JavaScript、PHP、C/C++等编程语言中,对数组(或集合)进行排序都是程序开发人员的必备技能。
排序一般可分为两大类:
1.内部排序
当数据相对较少时,我们可以将所有需要排序的数据全部加载到内存中,然后对其进行排序。内部排序主要包括
交换式排序法
、选择式排序法
和插入式排序法
。2.外部排序
当数据量非常大时,计算机内存空间无法一次性加载所有数据,此时需要借助于外部存储空间对其进行排序。外部排序主要包括
合并排序法
和直接合并排序法
。
由于外部排序所需处理的数据量非常大,绝大多数的程序开发工作中都不会用到,因此我们这里不对其进行讨论。现在我们来具体讨论内部排序法。
上面我们已经提到,内部排序法可以分为交换式排序法
、选择式排序法
和插入式排序法
。这三种排序法又可以继续分类为具体的排序方法。
交换式排序法
交换式排序法,意即将所有的数据按照一定的方式进行比较,然后根据数据比较的结果,对其数据位置进行相应的多次交换,以达到排序的目的。交换式排序又包括以下两种主要排序方法:
冒泡排序
快速排序
选择式排序法
选择式排序法,意即按照一定的方式从所有的数据中选择符合排序规则的某个元素,然后将其与指定顺序的数据交换位置,以达到排序的目的。选择式排序法又包括以下两种主要排序方法:
选择排序
堆排序
插入式排序法
插入式排序法,意即按照一定的方式从所有的数据中选择符合规则的某个元素,然后按序放置在一个新的数据结构中,新的数据结构中的数据即是排序好的数据。插入式排序法又包括以下3种主要排序方法:
插入排序
Shell(谢耳/希尔)排序
二叉树排序
由于数据排序方法具体内容的篇幅较多,因此不放在本文中整体显示,请点击上述排序方法对应的链接,即可查看到指定排序方法的具体内容。
由于数据排序的方法繁多,本文列举的只是一些常见的数据排序方法,并且相关算法文章的具体内容均以整数类型(int)的数组为例进行讲解。