国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python計數排序和基數排序算法實例

2019-11-25 18:26:12
字體:
來源:轉載
供稿:網友

一、計數排序

計數排序(Counting sort)是一種穩定的排序算法

算法的步驟如下:
找出待排序的數組中最大和最小的元素
統計數組中每個值為i的元素出現的次數,存入數組C的第i項
對所有的計數累加(從C中的第一個元素開始,每一項和前一項相加)
反向填充目標數組:將每個元素i放在新數組的第C(i)項,每放一個元素就將C(i)減去1
當輸入的元素是 n 個 0 到 k 之間的整數時,計數排序的時間復雜度為O(N+K),空間復雜度為O(N+K)。當K不是很大時,這是一個很有效的線性排序算法。

以下是測試代碼:

復制代碼 代碼如下:
#-*- coding:utf8 -*-
import random

def jishu(data, max):
    """
    基數排序:當輸入的元素是 n 個 0 到 k 之間的整數時(k不能太大,即max不能太大)
    @param data: 需要排序的數組
    @param max: 最大的數
    """
    result = [None for i in xrange(len(data))]  # 最后的結果
    c = [0 for i in range(max+1)]
    # 用數組c統計每個值=d的元素個數
    for d in data:
        c[d] = c[d] + 1

    # c[i]表示data中值<=i 的元素個數
    for i in range(1, max+1):
        c[i] = c[i] + c[i-1]

    # 在將C中的元素倒著打印出來就是排序好的
    for j in xrange(len(data)-1, -1, -1):
        result[c[data[j]]-1] = data[j]
        c[data[j]] = c[data[j]]

主站蜘蛛池模板: 呼玛县| 宁夏| 太原市| 大关县| 桐庐县| 稻城县| 和平区| 华宁县| 阳信县| 登封市| 乃东县| 大洼县| 阆中市| 惠州市| 墨玉县| 泾源县| 建阳市| 辽阳市| 永胜县| 阿尔山市| 云龙县| 资中县| 大足县| 广河县| 清丰县| 临邑县| 澎湖县| 长汀县| 阿鲁科尔沁旗| 西畴县| 武安市| 建瓯市| 河津市| 泽库县| 衡南县| 湘乡市| 白河县| 翁牛特旗| 渝中区| 黎川县| 综艺|