一、选择排序
a.简单选择排序:即利用一个大小为n的数组进行存储,每次从待排数据中取出最小值,直到n次,最后获取到一个从小到大的排序结果。
b.树形选择排序:利用完全二叉树,待排元素作为叶节点,选择两个节点中较小的作为其父节点,递归上去,则在根节点出获取到最小值,然后存放入结果数组中,然后将该元素的值改为无穷大,递归上述过程,获取到其他的节点,直到最终获取到n个节点。
c.堆排序:分为小根堆和大根堆(分别指根节点的值小于或等于左右孩子节点,大根堆则刚好相反)。在插入新元素的时候放在堆的尾端,然后进行堆的顺序进行调整,获取到有序的堆的时候,就能在根处获取到对应的最大或者最小值。
二、交换排序
a.冒泡排序:通过无序区中相邻关键字的比较和位置的交换,使得关键字大的或者小的像气泡一样浮出水面。
b.快速排序:(是目前基于比较的排序方法中最好的方法):将一个大的集合划分为两个小的集合,然后对两个子集实施同样的算法,将两个子集排好序后再重新合在一起(可另起一个变量进行基准值得存储,然后直接在待排元素的数组上进行移动,头尾两端交叉进行寻找对应的元素进行移动,最后将第三方变量的值赋值回到中间位置, 则实现两个子集的划分),递归下去就可以进行对应的子集的排序。
三、插入排序
a.直接插入排序:在一个存储长度为n的原始数据数组中,取出一个元素,与前面有序的元素进行比较,找到插入的位置后,移动有序的元素获得一个位置,然后进行元素的插入。
b.折半插入排序:在直接插入排序中,寻找合适的插入位置时,是进行遍历寻找,该算法则是在进行位置寻找的时候,进行二分法的位置寻找。
c:表插入排序:利用链表结构进行排序。
d.希尔排序:利用直接插入排序在原始数据基本有序的情况下效率较高的特点,该算法则是先使原始数据处于基本有序的状态,再通过直接插入排序来进行排序。对基本数据进行基本有序的操作:按照一定的间隔来进行分组,所有的分组独立进行排序,但是他们是穿插进行的,间隔划分到一定程度后,获得的元素基本有序(注意间隔大小除1外没有公因子,且最后一个分组间隔必须为1)。
四、归并排序
a.将两个或多个有序表合并成一个有序表的过程(可借助第三方的数组进行过度的存储)
总结:
1、数据规模小的排序,可以采用任意一种排序方法,但直接插入排序,简单选择排序,冒泡排序较简单
2、如果基本数据基本有序,可直接采用插入排序,冒泡排序或者快速排序
3、数据规模较大,可采用快速排序,堆排序或归并排序,快速排序是目前基于比较的排序方法中认为是最好的方法
4、不同的排序方法可以结合起来进行使用