排序的稳定性
    稳定 A B A 为AAB,两个A的相对位置能够保证不变
    不稳定 A B A 为AAB,两个A的相对位置不保证不变
    根据在排序过程中待排序的记录是否全部被放置在内存中,排序分为:内排序和外排序
    内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。
    外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。
    排序算法的性能:
    1时间性能
    2辅助空间
    3算法复杂性
    内排序:插入、交换、选择、归并排序
    冒泡排序 谭浩强C P147
    选择排序 谭浩强C P197
    冒泡排序
    时间复杂度O(n^2)
    简单选择排序
    最大特点:交换移动数据次数少,性能上还是优于冒泡排序
    时间复杂度O(n^2)
    直接插入排序
    最大特点:只需要一个记录的辅助空间。时间复杂度上,比冒泡和简单选择排序还要好一点
    时间复杂度O(n^2)
    希尔排序
    第一个突破O(n^2)的排序算法;在直接插入排序基础上改进
    将相隔某个 增量的记录,组成一个子序列,实现跳跃性的移动,使得排序的效率提高
    不是一种稳定的排序算法。
    选择好的增量序列
    时间复杂度,不一定,在O(nlogn) ~O(n^2) 范围之间
    堆排序 Heap Sort
    与简单选择排序同属选择排序
    大顶堆
    小顶堆
    堆排序复杂度:主要消耗在,初始化堆O (n)和重建堆的反复筛选上O(nlogn)
    最好、最坏、平均时间复杂度都是O(nlogn)
    是一种不稳定的排序方法
    堆排序(Heapsort)之Java实现
    快速排序,情绪化的天才,稍有不慎发挥就不好
    归并排序,需要O(n)的空间复杂度,
    堆排序,少量索取,大量副处,O(1)的空间复杂度
    稳定性上,归并排序独占鳌头
    简单选择排序看似各种被虐,其实不然。他的移动次数是很少的,因为它通过大量比较后明确选择记录才进行移动,有的放矢。