title: 数据结构之排序
tags: 数据结构与算法之美
author: 辰砂
一、引言
排序的算法在数据结构中占据很大的位置,包括考研的时候都是非常热门的考点,java的语言里面封装了一些的排序算法。比如Arrays.sort()这个工具类的方法里面的实现就是快速排序的思想。这里对排序各类算法做一个总结的概述,后面会针对常见的排序算法的思想,实现,时间复杂度写一系列的相关的文章,由于知识点都老生常谈了,所以尽量写的通俗易懂,同时也会参考各类优秀的博客,书籍。
二、掌握
- 掌握排序的基本概念和各种排序方法的特点,并能加以灵活应用
- 熟练掌握直接插入排序、折半插入排序、起泡排序、直接选择排序、快速排序的排序算法及其性能分析
- 掌握希尔排序、归并排序、堆排序、基数排序的方法及其性能分析
- 掌握外部排序方法中败者树的建立及归并方法,掌握置换-选择排序的过程和最佳归并树的构造方法。
三、名词解释
1.排序(Sorting):是指将一个数据元素的任意序列重新排列成一个按关键字有序的序列。所以排序的目的就是为了查找。
2.稳定性假设Ri=Rj,且在排序前的序列中Ri领先于Rj,若在排序后的序列中Ri仍领先于Rj,则称所用的排序方法是稳定的,反之称所用的排序方法是不稳定的。(解释:一个数组里面有两个相同的数字,经过排序过后,两个相同的数字的相对位置发生改变了,说明是不稳定的)
3.内部排序:指的是待排序记录放在计算机随机存储器中进行的排序过程
4.外部排序:指的是待排序记录的数量很大,以致内在一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。外部排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,显然外部排序要复杂得多。
5.直接插入排序(Straight Insertion Sort):它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的,记录数增1的有序表。
6.希尔排序(Shell’s Sort):又称缩小增量排序,基本思想是先将整个记录序列分割成若干子序列分别进行直接插入排序,待整个序列中记录基本有序时,再对全体记录进行一次直接插入排序。
7.起泡排序(Bubble Sort):首先将第一个记录的关键字同第二个记录的关键字进行比较,或为逆序,则交换,依此类推,直至第n-1个记录和第n个记录的关键字进行比较为止。判别起泡排序结束的条件应该是在一趟排序过程中没有进行交换记录的操作。
8.快速排序(Quick Sort):它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,分别对这丙部分继续进行快速排序,直至整个序列有序。
9.选择排序:它的基本思想是每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录。
10.堆排序(Heap Sort):若在输出堆顶的最小值之后,使得剩余的n-1个元素的序列重新又构成一个堆,则得到n个元素中的次小值,如此反复,便能得到一个有序序列,称这个过程为堆排序。
11.归并排序(Merging Sort)是将两个或两个以上的有序表组合成一个新的有序表,其中2-归并中的核心操作是将一维数组中前后相信的两个有序序列归并为一个有序序列。
四、总体
1.根据稳定性划分
2.根据算法思想划分
五、排序算法的好坏如何衡量
1.时间效率——排序速度(比较次数与移动次数)
2.空间效率——占内存辅助空间的大小
3.稳定性——A和B的关键字相等,排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。
六、各类常见算法的时间复杂度
后续详细说明的各类算法的博文持续更新中
参考