zoukankan      html  css  js  c++  java
  • 算法导论82 以线性时间原地排序

     假设有一个有n个数据记录组成的数组要排序,且每个记录的关键字的值为0或1。排序这样一组记录的一个算法应具备如下三个特性中的一部分。
    1)算法的运行时间为O(n)。
    2)算法是稳定的。
    3)算法是原地排序的,它可以使用除输入数组以外的固定量的存储空间。
    a)给出一个满足上述条件1和条件2的算法。
    b)给出一个满足上述条件1和条件3的算法。
    c)给出一个满足上述条件2和条件3的算法。
    d)在a)~c)中给出的算法能否用来在O(bn)时间内排序,对有b位关键字的n个记录进行基数排序?如果行,说明如何做;如果不行,说明原因。
    e)假设一个n个记录中每个的关键字都介于1到k之间。说明如何修改计数排序,使得可以在O(n+k)时间内对n个记录原地排序。除输入数组外,可另用O(k)的存储空间。你给出算法是稳定的吗?(提示:当k=3时应该如何做)
     
    解答提要:
    a)计数排序
    b)快排的划分思想,因为只有0,1故而一次划分即可
    c)插入排序之类的都可以
    d)第一个可以,第二个不行(不稳定),第三个也不可以(时间效率)
    e)思路,计数排序,使用两个数组A[n],C[k],其中A味输入数组,C为记录各数字出现次数的数组,然后直接由C生成输出数组存放在A中。   不稳定的!
  • 相关阅读:
    4. Qt的容器类
    hdu 4507 数位dp(求和,求平方和)
    MVC3和MVC4中CRUD操作
    SSL 中证书能否够使用IP而不是域名
    TinyXml快速入门(一)
    C++ TinyXml操作(含源码下载)
    Tinyxml 操作XML
    msxml 操作xml
    MFC中全局变量的定义及使用
    VC++中操作XMLWin32实例
  • 原文地址:https://www.cnblogs.com/xubenben/p/2828543.html
Copyright © 2011-2022 走看看