常见排序算法(交换排序-曾经的笔记)

二、交换排序

        交换排序的基本思想就是两两比较待排序的关键码,如果遇到逆序(与目标顺序正好相反) 时,就进行交换,直到所有对象都排好序为止。常见的交换排序有:起泡排序和快速排序。

   

1.起泡排序

    思想:从前往后,将第一记录与紧接其后的记录进行比较,若为逆序,则交换,然后比较第二个记录与第三个记录比较,逆序则交换,依此类推直到最后。然后再从第一个到倒数第二个记录,重复以上操作,直到只剩下第一个记录为此。总之,当递增排序时,可以这样处理:每次比较相邻的两个元素,大者向下移动,小者向上移动,每一趟起泡至少有一个记录排好序。

 

 

【效率分析】

        空间效率:仅用了一个辅助单元。

时间效率:总共要进行n-1趟冒泡,对j个记录的表进行一趟冒泡需要j-1次关键码比较。


        移动次数:

       最好情况下:待排序列已有序,不需移动。

 

2.快速排序

        思想:以某个记录为界(该记录称为支点)通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行同样的分割继续排序,直到不能再分割,直到整个序列有序为止。

       效率分析

            空间效率:快速排序是递归的,每层递归调用时的指针和参数均要用栈来存放,递归调用层次数为(log2n)。因而,存储开销在理想情况下为O(log2n);在最坏情况下,即递归二叉树是一个单链,为O(n)

            时间效率:在n个记录的待排序列中,一次划分需要约n次关键码比较,时效为O(n),若设T(n)为对n个记录的待排序列进行快速排序所需时间。

        理想情况下:每次划分,正好将分成两个等长的子序列,则

        T(n)cn+2T(n/2)                 c是一个常数

            cn+2(cn/2+2T(n/4))=2cn+4T(n/4)

            2cn+4(cn/4+T(n/8))=3cn+8T(n/8)

           ······

            cnlog2n+nT(1)=O(nlog2n)

        最坏情况下:即每次划分,只得到一个子序列,时效为O(n2)

快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。但若初始序列按关键码有序或基本有序时,快排序反而蜕化为冒泡排序。为改进之,通常以“三者取中法”来选取支点记录,即将排序区间的两个端点与中点三个记录关键码居中的调整为支点记录。快速排序是一个不稳定的排序方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值