06 基数排序

import math
def radixSort(list, radix = 10):
    ‘‘‘
    math.ceil 为x取整,结果是不小于x的最小整数.
    math.log(x, a)	返回 log 以 a 为底 x 的对数,若不给定 a 则底默认为 e
    ‘‘‘
    k = int(math.ceil(math.log(max(list), radix)))
    bucket = [[]for i in range(radix)]
    for i in range(1, k+1):
        for j in list:
            # math.floor(x)返回 ≦ x的最大整数,例:math.floor(3.4) = 3
            bucket[math.floor(j / (radix **(i-1)) % (radix))].append(j)
            #print(bucket)
        # 从列表中删除所有元素
        del list[:]
        for z in bucket:
            print (z)
            list +=z
            print (list)
            del z[:]
    return list

list = [434,24,657,976,2354,9,67,8099,4353,3453]
print(radixSort(list))

‘‘‘
import random
import math
def radixSort():
    #A=[random.randint(1,9999) for i in range(10)]
    A =[5042,7431,3620,6306,858,8215,6438,2187,9830,2611]
    print(A)
    for k in range(4):  #4轮排序
        s=[[] for i in range(10)]
        for i in A:
            # 10**k 巧妙的把k=0问题解决了
            s[math.floor(i/(10**k)%10)].append(i)
        # s = [[A,B,C],[]], b = [A,B,C],a=A.
        A=[a for b in s for a in b]
    return A

print(radixSort())
‘‘‘

  

时间: 2024-10-08 07:19:51

06 基数排序的相关文章

基数排序及C语言实现

基数排序的基本思想是对数字的每一位进行排序,先对个位排序,然后十位,百位--,对每一位进行排序时,要求采用稳定排序算法,比如前面讨论过的计数排序.以一个三位整数为例,过程是这样的: 该算法同样能达到线性复杂度.下面是代码.(好吧,我知道写的很菜--) #include <stdio.h> #define NUM 10 //数组元素个数 void counting_sort(int a[],int b[],int c[],int atemp[]); int main() { int i; int

【C++基础 06】explict关键字

C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. 1.示例 我们先来看一段示例代码: class A { public: A(int v):var(v){};//带一个int型值的构造函数 bool isSame(const A& ref) const {return var == ref.var;}//判等函数 private: int var;//成员变量var }; void main()

初尝Mcafee之在ePO中进行策略和客户端任务设置【06】

一.策略和客户端任务概述 在ePO中点击"菜单",可以看到一个策略的大分类:ePO就是通过分配策略和客户端任务给客户端代理,然后代理将这些策略和客户端任务分配给本地相应的Mcafee杀毒防护软件进行执行: 策略是针对软件的内在参数和计划任务的配置,例如VirusScan是否扫描压缩文件,VirusScan的扫描计划的设置: 客户端任务是针对软件的外在交互,例如安装,部署,更新,信息统计等: 二.策略和客户端任务的分配结构: 策略和客户端任务的分配结构有点跟Windows Server的

数据结构-基数排序

#include <iostream> using namespace std; void CountSort(int* a,int k,int n){ int s = 1; for(int i=0;i<k;i++){ s *= 10; } int* b = new int[n]; int* c = new int[n]; for(int i=0;i<n;i++){ b[i] = 0; c[i] = 0; } int tmp1 = 0; for(int i=0;i<n;i++

基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)

冒泡排序 public static void bubbleSort(int[] arr){ int lgn = arr.length; for (int i = 0; i < lgn - 1; i++) { for (int j = 0; j < lgn - 1 - i; j++) { if(arr[j] > arr[j + 1]){ int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } 选择排序 publ

java进阶06 线程初探

线程,程序和进程是经常容易混淆的概念. 程序:就是有序严谨的指令集 进程:是一个程序及其数据在处理机上顺序执行时所发生的活动 线程:程序中不同的执行路径,就是程序中多种处理或者方法. 线程有两种方法实现 一:继承Thread 覆盖run方法 package Thread; public class Thread1 { public static void main(String[] args){ MyThread1 thread1=new MyThread1(); thread1.setName

基数排序与桶排序,计数排序【详解】

桶排序简单入门篇^-^ 在我们生活的这个世界中到处都是被排序过的东东.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东东都需要排序,可以说排序是无处不在.现在我们举个具体的例子来介绍一下排序算法. 首先出场的是我们的主人公小哼,上面这个可爱的娃就是啦.期末考试完了老师要将同学们的分数按照从高到低排序.小哼的班上只有5个同学,这5个同学分别考了5分.3分.5分.2分和8分,哎,考得真是惨不忍睹(满分是10分).接下来将分

基数排序(桶排序) 不同方法

详细解释:算法导论/数据结构书 1.链式基数排序 //n个数,每个数有g个关键字//排序:从最后的关键字开始到最前的关键字//分配+收集//每个关键字分配+收集需要n+n时间,而共有g个关键字,时间复杂度为O(2ng),效率很高.//如果用数组,数据集中在一个区间,则区间的长度很长,另外的区间的内存浪费了.//用链表可以解决这个问题,且数据不需要先后顺序,所以无必要非要用数组 1 #include <stdio.h> 2 #include <stdlib.h> 3 //个数 4 #

1099:零起点学算法06——再来一题除法算术题

1099: 零起点学算法06--再来一题除法算术题 Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 4811  Accepted: 1917[Submit][Status][Web Board] Description 再来一题除法算术题 Input 没有输入 Output 输出8除以5,保留1位小数 Sample Output 1.6 Source 零起点学算法 1 # include <std