python算法学习之计数排序实例_python

python算法学习之计数排序实例

复制代码 代码如下:

# -*- coding: utf-8 -*-

def _counting_sort(A, B, k):
    """计数排序,伪码如下:
    COUNTING-SORT(A, B, k)
    1  for i ← 0 to k // 初始化存储区的值
    2    do C[i] ← 0
    3  for j ← 1 to length[A] // 为各值计数
    4    do C[A[j]] ← C[A[j]] + 1
    5  ▷ C[i]包含等于i的元素个数
    6  for i ← 1 to k // 求计数和,确定<=各值的元素数
    7    do C[i] ← C[i] + C[i-1]
    8  ▷ C[i]包含小于或等于i的元素个数
    9  for j ← length[A] downto 1
    10   do B[C[A[j]]] ← A[j] // 将A[j]值放到对应位置
    11      C[A[j]] ← C[A[j]] - 1 // 避免元素相同时覆盖同一位置

    T(n) = θ(n)

    Args:
        A (Sequence): 原数组
        B (Sequence): 结果数组
        k (int): 值上限,假定了所有元素介于[0,k]
    """
    len_c = k + 1
    C = [0] * len_c
    for a in A:
        C[a] = C[a] + 1
    for i in range(1, len_c):
        C[i] = C[i] + C[i-1]
    for a in A[::-1]:
        B[C[a]-1] = a
        C[a] = C[a] - 1

def counting_sort(A):
    """假定A数组所有元素都介于[0,len(A)-1]"""
    B = [0] * len(A)
    _counting_sort(A, B, len(A) - 1)
    return B

if __name__ == '__main__':
    import random, timeit

    items = range(10000)
    random.shuffle(items)

    def test_sorted():
        print(items)
        sorted_items = sorted(items)
        print(sorted_items)

    def test_counting_sort():
        print(items)
        sorted_items = counting_sort(items)
        print(sorted_items)

    test_methods = [test_sorted, test_counting_sort]
    for test in test_methods:
        name = test.__name__ # test.func_name
        t = timeit.Timer(name + '()', 'from __main__ import ' + name)
        print(name + ' takes time : %f' % t.timeit(1))

时间: 2024-09-09 11:18:22

python算法学习之计数排序实例_python的相关文章

python算法学习之桶排序算法实例(分块排序)_python

复制代码 代码如下: # -*- coding: utf-8 -*- def insertion_sort(A):    """插入排序,作为桶排序的子排序"""    n = len(A)    if n <= 1:        return A    B = [] # 结果列表    for a in A:        i = len(B)        while i > 0 and B[i-1] > a:      

【算法导论】计数排序

计数排序 比较排序:通过元素间的比较对序列进行排序的算法称为比较排序. 常见的比较排序算法有:冒泡排序法.插入排序法.合并排序法.快速排序法,堆排序法等等.任何比较排序法在最坏情况下的时间复杂度为O(nlogn).因此,合并排序和堆排序是渐进最优的. 非比较排序:用非比较的方法来进行排序的算法. 常见的非比较排序算法有:计数排序法.基数排序法.桶排序法.它们都是以线性时间运行的.由于是非比较的,因此下界O(nlogn)对它们是不适用的. 下面来讨论计数排序: 前提假设:序列的值域在0到k之间.

Python 爬虫学习笔记之单线程爬虫_python

介绍 本篇文章主要介绍如何爬取麦子学院的课程信息(本爬虫仍是单线程爬虫),在开始介绍之前,先来看看结果示意图 怎么样,是不是已经跃跃欲试了?首先让我们打开麦子学院的网址,然后找到麦子学院的全部课程信息,像下面这样 这个时候进行翻页,观看网址的变化,首先,第一页的网址是 http://www.maiziedu.com/course/list/, 第二页变成了 http://www.maiziedu.com/course/list/all-all/0-2/, 第三页变成了 http://www.ma

算法精解---计数排序

#include <stdio.h> #include <stdlib.h> #include <string.h> #define NR(x) sizeof(x)/sizeof(x[0]) //计数排序 //排序成功返回0,否则返回-1 //局限:只能用于整型或者那些可以用整型来表示的数据集合 //优点:速度快,稳定 /* 利用计数排序将数组data中的整数进行排序. data中的元素个数由sized决定. 参数k为data最大的整数加1,当ctsort返回时,k为d

python对字典进行排序实例_python

本文实例讲述了python对字典进行排序的方法,是非常实用的技巧.分享给大家供大家参考. 具体实现方法如下: import itertools thekeys = ['b','a','c'] thevalues = ['bbb','aaa','cccc'] d = dict(itertools.izip(thekeys,thevalues)) #创建字典 print d def sortedDictValue(adict): keys = adict.keys() keys.sort() ret

Python中对列表排序实例_python

很多时候,我们需要对List进行排序,Python提供了两个方法,对给定的List L进行排序: 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序(从2.4开始) 这两种方法使用起来差不多,以第一种为例进行讲解: 从Python2.4开始,sort方法有了三个可选的参数,Python Library Reference里是这样描述的 复制代码 代码如下: cmp:cmp specifies a custom comparison function

python列表与元组详解实例_python

在这章中引入了数据结构的概念.数据结构是通过某种方式组织在一起的数据元素的集合.在python中,最基本的数据结构就是序列.序列中的每个元素被分配一个序号,即元素的位置,也被称为索引.注意:第一个索引是0.1.序列概览python有6种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象. 这里重点介绍列表和元组.列表和元组主要区别在于,列表可以修改,元组不可修改.一般来说,在几乎所有情况下列表都可以代替元组.在需要操作一组数值的时候,序列很好用: 复制代码

用Python实现命令行闹钟脚本实例_python

前言: 这篇文章给大家介绍了怎样用python创建一个简单的报警,它可以运行在命令行终端,它需要分钟做为命令行参数,在这个分钟后会打印"wake-up"消息,并响铃报警,你可以用0分钟来测试,它会立即执行,用扬声器控制面板调整声音. 以下是脚本: # alarm_clock.py # Description: A simple Python program to make the computer act # like an alarm clock. Start it running

跟老齐学Python之编写类之一创建实例_python

说明:关于类的这部分,我参考了<Learning Python>一书的讲解. 创建类 创建类的方法比较简单,如下: 复制代码 代码如下: class Person:  注意,类的名称一般用大写字母开头,这是惯例.当然,如果故意不遵循此惯例,也未尝不可,但是,会给别人阅读乃至于自己以后阅读带来麻烦.既然大家都是靠右走的,你就别非要在路中间睡觉了. 接下来,一般都要编写构造函数,在写这个函数之前,先解释一下什么是构造函数. 复制代码 代码如下: class Person:     def __in