zoukankan      html  css  js  c++  java
  • 计数排序

    假设n个输入元素中每一个都是介于0到k之间的整数,此处k为某个整数。当k=O(n)时,计数排序的运行时间为O(n)。
    对每一个数的元素x,确定出小于x的元素个数。有了这一信息就可以把x直接放到最终输出数组中的位置上。

    from random import randint
    
    
    def countingSort(alist, k):
        n = len(alist)
        b = [0 for i in range(n)]
        c = [0 for i in range(k + 1)]
        for i in alist:
            c[i] += 1
        for i in range(1, len(c)):
            c[i] = c[i - 1] + c[i]
        for i in alist:
            b[c[i] - 1] = i
            c[i] -= 1
        return b
    
    
    if __name__ == '__main__':
        a = [randint(0, 100) for i in range(100)]
        print(countingSort(a, 100))
    

    计数排序的核心原理就是统计每个数比列表其他数大的次数, 次数越多说明, 这个数越大, 反之, 大于的次数越少, 说明, 这个数就越小。

    def sort(l):
        n = len(l)
        res = [None] * n
        # 首次循环遍历, 每个列表的数都统计
        for i in range(n):
            # p 表示 a[i] 大于列表其他数 的次数
            p = 0
            # q 表示 等于 a[i] 的次数
            q = 0
            # 二次循环遍历, 列表中的每个数都和首次循环的数比较
            for j in range(n):
                if l[i] > l[j]:
                    p += 1
                elif l[i] == l[j]:
                    q += 1
            for k in range(p, p + q):  # q表示 相等的次数,就表示, 从 P 开始索引后, 连续 q 次,都是同样的 数
                res[k] = l[i]
        return res
    
    
    print(sort([5, 5, 3]))
    
  • 相关阅读:
    Redis介绍
    getch
    gecher
    C语言中的sleep函数
    sleep
    C语言中的System()函数
    System的使用
    函数参数的传递方式
    C语言strlen()函数:返回字符串的长度
    strlen
  • 原文地址:https://www.cnblogs.com/qiaoqianshitou/p/9927823.html
Copyright © 2011-2022 走看看