首页 > 其他分享 >基数排序

基数排序

时间:2023-08-16 11:12:20浏览次数:32  
标签:10 right random li while 基数排序 left

博客地址:https://www.cnblogs.com/zylyehuo/

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

# O(n) O(kn)
# NB O(nlogn)
import random


def partition(li, left, right):
    tmp = li[left]
    while left < right:
        while left < right and li[right] >= tmp:  # 从右面找比tmp小的数
            right -= 1  # 往左走一步
        li[left] = li[right]  # 把右边的值写到左边空位上
        # print(li, 'right')
        while left < right and li[left] <= tmp:
            left += 1
        li[right] = li[left]  # 把左边的值写到右边空位上
        # print(li, 'left')
    li[left] = tmp  # 把tmp归位
    return left


def radix_sort(li):
    max_num = max(li)  # 最大值 9->1, 99->2, 888->3, 10000->5
    it = 0
    while 10 ** it <= max_num:
        buckets = [[] for _ in range(10)]
        for var in li:
            # 987 it=1  987//10->98 98%10->8;    it=2  987//100->9 9%10=9
            digit = (var // 10 ** it) % 10
            buckets[digit].append(var)
        # 分桶完成
        li.clear()
        for buc in buckets:
            li.extend(buc)
        # 把数重新写回li
        it += 1


li = [random.randint(0, 10) for _ in range(10)]
random.shuffle(li)
print(li)

radix_sort(li)
print(li)

标签:10,right,random,li,while,基数排序,left
From: https://www.cnblogs.com/zylyehuo/p/17633482.html

相关文章

  • 基数排序详解
    基数排序详解1)前言:计数排序要学基数排序,掌握计数排序非常重要。计数排序的原理十分的简单。举个例子,排序52413,你打算怎么办?很简单是不是,冒泡排序、选择排序、归并排序……这些都足以解决。但如果你有100000000个数要排序,你可能就要束手就擒了。那如归这时候我告诉你:这1000......
  • 基数排序
    最近又有个奇奇怪怪的题目,数据为\(n\le1\times10^7\),并且还要用到排序,普通的排序肯定会超时,然后就发现了一种\(O(n)\)介绍基数排序(RadixSort)是桶排序的扩展,它是将整数按位数切割成不同的数字,然后按每个数位分别比较以此来排序。说详细点,也就是将所有数字统一为同样的......
  • 基本算法-基数排序
    思想当我们需要对一组数据进行排序时,常规的排序算法(如快速排序、归并排序等)通常是比较排序,即通过比较元素之间的大小关系来进行排序。但有时候我们需要对一组数据按照它们的“数字位”进行排序,此时比较排序并不是最优的选择,这时候基数排序就显得非常有效了。基数排序是一种非比......
  • 排序算法-基数排序
    基数排序RadixSort1.RadixSort介绍RadixSort属于“分配式排序”(DistributionSort),又称“桶子法”(BucketSort),其是通过比较待排序序列的所有元素的各个位的值,将元素分配至“桶”中,以达到排序的目的。RadixSort是一种效率较高且稳定的排序算法,其是桶排序的扩展。RadixSor......
  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描一次之后就可以确保最后一个元素位于正确的顺序,接着逐步进......
  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描......
  • 【基数排序算法详解】Java/Go/Python/JS/C不同语言实现
    说明基数排序(RadixSort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的......
  • 【八大数据排序法】基数排序法的图形理解和案例实现 | C++
    第二十章基数排序法:::hljs-center目录第二十章基数排序法●前言●认识排序●一、基数排序法是什么?1.简要介绍2.图形理解3.算法分析●二、案例实现1.......
  • 基数排序(Radix Sort)
    一、算法概述1.1算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排......
  • 常见排序算法之基数排序
    文章目录​​1、概述​​​​2、测试代码​​​​3、测试小案例​​1、概述基数排序(radixsort)属于“分配式排序”(distributionsort),又称“桶子法”(bucketsort)或binsort,顾......