zoukankan      html  css  js  c++  java
  • 【啊哈!算法】之一、排序算法比较

    作者:jofranks 原创作品,转载请标明出处!版权所有,侵权必究!

    来源:http://blog.csdn.net/jofranks


    啊哈!算法

    ok我们开始,我学习东西比较喜欢对比着来学习,记得以前学习历史的时候我就是这样,将知识点通过每一个线路联系起来,列成一个表或者线路图来记忆。学习算法也来这样,但是要知道,学习的时候我们还必须要不断的去练习!


    一、时间复杂度

    O(n^2):      冒泡排序、选择排序、插入排序、交换排序;

    O(nlog2n):其他非线性的排序算法(如:快速排序,归并排序,shell排序,堆排序);

    O(n):         线性排序算法;


    二、空间复杂度

    O(n):二路归并排序、基数排序、线性排序;

    O(nlogn):快速排序;

    O(1):其他排序;


    对时间复杂度和空间复杂度的讲解:

    时间复杂度:指执行算法所需要的计算工作量。

    空间复杂度:指执行这个算法所需的内存。

    三、算法稳定性

    稳    定:插入排序、冒泡排序、二路归并排序、二叉树排序以及其他线性排序;

    不稳定:选择排序、希尔排序、快速排序、堆排序;


    对稳定性和不稳定性的讲解

    稳定就是基本不动被,哈哈!  也就说啊,数据经过我们的排序算法排序后,仍然能保持它排序前的相对次序。

    不稳定:那就与稳定相反。

    例: 123(1)3(2)45  这是我们的原始数据,稳定算法排序后结果是123(1)3(2)45 ,而不稳定算法排序后的结果就是123(2)3(1)45 。看看是不是改变了!



    四、其他的比较

    n比较小的情况:

    如果对稳定性要求不高,呢么建议选择用选择排序,对稳定性要求高的话,建议选择用插入或者冒泡排序

    n比较大的情况(待排序的关键字在一个明显范围内):

    关键字比较随机,对稳定性要求不高 那么就用快速排序

    关键字有序,稳定性要求高时用归并排序

    关键字有序,稳定性要求高用堆排序


    我们用插入排序和冒泡排序的速度相对来说比较慢,但当参加排序的序列整体或者局部有序的时候,这两种排序能达到一个较快的速度。相反,速度会较慢。


    五、内排序和外排序

    内排序: 在排序的过程中,所有需要排序的数都在内存中,并在内存中调整他们的存储顺序。   、

    他的效率用比较次数来衡量,可以分为:插入排序,冒泡排序,选择排序,交换排序,基数排序等;

    外排序: 在排序的过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序的方法。   

    他用读写外存的次数来衡量效率。在数据较大的情况下只能分块排序,块与块之间不能保证有序。



    OK ,先到这里,下一节来看看这些算法的思想和代码实现等细节问题!

    --------------2012/7/28

    --------------jofranks 于南昌

  • 相关阅读:
    阿里P7架构师是如何解决跨域问题的!你有遇到吗?
    Node.js Express 框架
    用户管理 之 Linux 系统中的超级权限的控制
    [转] Exchange 2013 安装部署详解
    Clustered和Nonclustered Indexes 各自得特点和区别及长短处
    配置IIS5.5/6.0 支持 Silverlight
    redis模块使用
    redis介绍及安装
    linux上安装redis、远程配置及开机启动
    远程连接linux、配置SSHD
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211431.html
Copyright © 2011-2022 走看看