****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序

一、排序
    将一组杂乱无章的数据按一定的规律次序排列起来。
    排序的目的是什么?
        *便于查找!
    排序算法的好坏如何衡量?
        *时间效率--排序速度(即排序所花费的全部比较次数)
        *空间效率--占内存辅助空间的大小
        *稳定性--若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。

    *内部排序:指待排序记录全部存放在内存中排序的过程。
    *外部排序:指待排序记录的数量很大,以至于内存不能容纳全部记录,在排序过程中尚需对外存进行访问的过程。


    排序方法:
        *插入排序
            **直接插入排序
            **希尔排序
        *选择排序
            **直接选择排序
            **堆排序
        *交换排序
            **冒泡排序
            **快速排序
        *归并排序


二、插入排序
    每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
    插入排序有多种具体实现算法:
        1)直接插入排序
        2)希尔排序

        (1)直接插入排序
            先将序列中第1个记录看出一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序,排序过程为n-1趟插入。
            *时间效率:因为在最坏的情况下,所有元素的比较次数总和为(0 + 1 + ... + n-1) -> O(n2)。故时间复杂度为O(n2)
            *空间效率:仅占用一个缓冲单元---O(1)
            *算法的稳定性:稳定        

        (2)希尔排序
            先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di = 1,即所有记录放进一个组中排序为止。
            一般取d1 = n/2,,di+1=di/2,如果结果为偶数,则加1.

三、选择排序
    每一次从待排序的数据元素中选出最小的一个元素,存放在已经排序列的后面,直到全部待排序的数据元素拍完。
    *优点:实现简单
    *缺点:每趟只能确定一个元素,表长为n时需要n-1趟
    *前提:顺序存储结构
    选择排序分为
        1)直接选择排序
        2)堆排序

        (1)直接选择排序
            在所有记录中选出最小的记录,把它与第1个路径交换,然后在剩余的记录内选出最小的记录与第2个交换...依次类推。
        (2)堆排序
            堆是满足下列性质的数列{r1,r2,...,rn}

            堆排序即是利用堆的特性堆记录序列进行排序的一种排序方法。
            将无序序列建成一个堆,得到关键字最小(或者最大)的记录;输出堆顶的最小(大)值后,使剩余的n-1个元素又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫做堆排序。

            输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个堆顶至叶子的调整过程为“筛选”

            堆排序的最坏时间复杂度为O(nlog2n),堆排序的平均性能接近最坏性能。
            堆排序的辅助空间为O(1)。



猜你喜欢

转载自blog.csdn.net/qq_40223688/article/details/80276199