• 算法导论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中。   不稳定的!
  • 相关阅读:
    Android数字选择器-NumberPicker
    Eclipse上传代码到GitHub
    TortoiseGit上传代码到GitHub
    Git的简单介绍
    Android中的树状(tree)列表
    Android数据适配-ExpandableListView
    Android动画-补间(Tween)动画
    Android动画-帧动画
    Android中样式及主题
    Android消息通知-Notification
  • 原文地址:https://www.cnblogs.com/xubenben/p/2828543.html
Copyright © 2020-2023  润新知