常见排序算法总结
一、排序算法的分类
1.插入类排序
在一个已经有序的序列中,插入一个新的关键字。常见的有 直接插入排序、折半插入排序、希尔排序。
2.交换类排序
核心在于“交换”,在每一趟的排序过程中,都通过一系列的“”交换动作,让一个关键字排到它最终的位置上。常见的有 冒泡排序、快速排序。
3.选择类排序
核心在于“选择”,即每一趟排序都选出一个最大或最小的关键字,把它与第一个或最后一个关键字交换,这样就实现了最大或最小关键字到位。常见的有 简单选择排序、堆排序。
4.归并类排序
将一个或两个以上的有序序列合并成一个新的有序序列。常见的有二路归并排序。
5.基数类排序
基数类排序基于多关键字排序的思想,把一个逻辑关键字拆分成多个关键字。
二、各种排序算法的实现
1.直接插入排序
思想:每趟将一个待排序的关键字按其值大小插入到已经排好的部分有序序列的适当位置上,直到所有待排关键字都插入到有序序列中为止。
2.折半插入排序
思想:折半插入排序的基本思想和直接插入排序类似,区别在于查找插入位置的方法不同,折半查找采用折半查找法来查找插入位置的。
3.希尔排序(缩小增量排序)
思想:将待排序序列按某种规则分成几个子序列,分别对这几个字序列进行直接插入排序(若将增量定为1,就是直接插入排序)。例如在第一趟希尔排序时可以用增量5来分割序列,第二趟以2为增量,第三趟以1为增量。
4.冒泡排序
思想:首先第一个关键字和第二个关键字进行比较,如果第一个大则两者交换,否则不换;然后第二个关键字再和第三个关键字进行比较... ,冒泡排序算法结束的条件是在一趟排序过程中没有发生关键字交换。
5.快速排序
思想:作为交换类排序,它是通过多次划分操作来实现排序。每一趟选择当前所有字序列中的一个关键字作为枢轴,将子序列中比枢轴小的移到枢轴前面,比枢轴大的放到后面;在把这个结果当做下一轮的初始序列集。
6.简单选择排序
思想:扫描整个序列,找出最小的一个关键字和第一个关键字交换,接着从剩下的关键字中继续这种选择和交换,最终使序列有序。
7.堆排序
思想:堆是一种数据结构,可以把它看成一颗完全二叉树。父结点大于孩子结点叫做大顶堆,父结点小于孩子结点叫做小顶堆。堆排序最关键的操作就是将序列调整为堆。
8.二路归并排序
思想:归并排序可以看成是一个分而治之的过程。先将整个序列分为两半,对每一半分别进行归并排序,将得到两个有序序列,然后将这两个序列合并成一个序列即可。