基数排序-LSD

时间:2022-09-23 22:50:30

这个最低位优先的基数排序,非常适合移植到硬件设备中,所以,我们提供一个C源码

——————————————————————————————————————

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define maxSize 100

#define maxValue 20000

typedef struct

{

int data;

int link;

}SLNode;

typedef struct

{

SLNode elem[maxSize];

int n;

}StaticLinkList;

void createSList(StaticLinkList *SL, int arr[], int n)

{

for (int i=0; i<n; i++)

{

SL->elem[i+1].data = arr[i];

SL->elem[i+1].link = i+2;

}

SL->elem[0].data = maxValue;

SL->elem[0].link = 1;

SL->elem[n].link = 0;

SL->n = n;

}

#define rd 10

#define d 3

int getDigit(int x, int k)

{

if (k<1||k>d)

{

return -1;

}

for(int i=1; i<=d-k; i++)

{

x /= 10;

}

return x%10;

}

void SLinkRadixSort(StaticLinkList * SL)

{

int front[rd], rear[rd];

int i, j, k, last, s, t;

for (i=d; i>=1; i--)

{

for (j=0; j<rd; j++)

{

front[j] = 0;

}

for (s=SL->elem[0].link; s!=0; s=SL->elem[s].link)

{

k = getDigit(SL->elem[s].data, i);

if (0==front[k])

{

front[k] = s;

}

else

{

SL->elem[rear[k]].link = s;

}

rear[k] = s;

}

for (j=0; j<rd&&0==front[j]; j++);

SL->elem[0].link = front[j];

last = rear[j];

for (t=j+1; t<rd; t++)

{

if (0!=front[t])

{

SL->elem[last].link = front[t];

last = rear[t];

}

}

SL->elem[last].link = 0;

}

}

void main()

{

int arr[] = {332, 633, 589, 232, 664, 179, 457, 825, 405, 361};

int len = sizeof(arr)/sizeof(int);

StaticLinkList SL;

createSList(&SL, arr, len);

SLinkRadixSort(&SL);

for (int i=SL.elem[0].link; 0!=i; i = SL.elem[i].link)

{

printf("%d ", SL.elem[i].data);

}

printf("\n");

}

//result

# ./sort
179 232 332 361 405 457 589 633 664 825

基数排序-LSD的更多相关文章

  1. 十大经典排序算法总结(JavaScript描述)

    前言 读者自行尝试可以想看源码戳这,博主在github建了个库,读者可以Clone下来本地尝试.此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:十大经典算法总结 这世界 ...

  2. 十大经典排序算法的JS版

    前言 个人博客:Damonare的个人博客 如遇到问题或有更好的优化方法,可以: 提issue给我 或是pull requests 我都会看到并处理,欢迎Star. 这世界上总存在着那么一些看似相似但 ...

  3. 排序算法总结&lpar;C语言版&rpar;

    排序算法总结(C语言版) 1.    插入排序 1.1     直接插入排序 1.2     Shell排序 2.    交换排序 2.1     冒泡排序 2.2     快速排序 3.    选择 ...

  4. JavaScript十大经典排序算法

    排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序: 输入:n个数:a1,a2,a3,…,an输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’ 再讲的形象点就是排排坐 ...

  5. 浅析十大常见排序(含C&plus;&plus;代码)

    首先声明一下,本文只对十种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的 了解可以参考以下资料: 1.<data structure and algor ...

  6. 十大经典排序算法&lpar;Javascript实现&rpar;

    前言 总括: 本文结合动图详细讲述了十大经典排序算法用Javascript实现的过程. 原文博客地址:十大经典排序算法 公众号:「菜鸟学前端」,回复「666」,获取一揽子前端技术书籍 人生有情泪沾衣, ...

  7. 基本排序算法——基数排序java实现

    基数排序 package basic.sort; import java.util.Arrays; import java.util.Random; public class RadixSort { ...

  8. 基数排序 java 实现

    基数排序 java 实现 Wikipedia: Radix sort geeksforgeeks: Radix sort 数学之美番外篇:快排为什么那样快 Java排序算法总结(八):基数排序 排序八 ...

  9. 基数排序详解以及java实现

    前言 基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程.我在上一篇 ...

随机推荐

  1. 安卓GreenDao框架一些进阶用法整理

    大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession. ...

  2. uva 12169

    /* 巨大的斐波那契数列_________________________________________________________________________________ #inclu ...

  3. 微信H5支付:网络环境未能通过安全验证,请稍后再试。解决办法(PHP版)

    前(tu)言(cao) (这段前言纯属吐槽,着急解决问题的小伙伴,赶紧看正文吧) 最近做了支付宝和微信支付,先做的是PC端网站的支付,就是出个二维码,然后手机扫描支付,当然支付宝在扫码页面支持登录支付 ...

  4. rcnn系列

    提纲挈领 https://blog.csdn.net/linolzhang/article/details/54344350 SPP https://www.cnblogs.com/gongxijun ...

  5. python------模块定义、导入、优化 -------&gt&semi;Yaml&comma; l模块

    一. yaml模块 用来做配置文件. 需要pip安装该包. 二. ConfigParser模块 用来生成和修改常见配置文件,在python3.x版本中更名为configparser. (什么是配置文件 ...

  6. 关于学习JAVA程序设计语言的回顾与展望

    回顾篇 时光荏苒,大学生活已然过半.看了老师分享的几篇博文,我的内心是震憾并且惭愧的.相比别人,自己做的实在是不够多,不够好.在刚刚结束的大二上半学期,我学习了JAVA初级程序设计,虽然每节课都认真听 ...

  7. pip安装包(python安装gevent(win))

    下载: https://www.lfd.uci.edu/~gohlke/pythonlibs/#greenlet greenlet greenlet-0.4.14-cp36-cp36m-win_amd ...

  8. TCP连接建立与断开

    tcp状态 LISTEN:侦听来自远方的TCP端口的连接请求 LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和 ...

  9. OA项目中的论坛模块设计与实现

    1.论坛是什么?论坛与贴吧有什么区别? 简单的说论坛和贴吧都是发表言论和讨论的一个平台. 贴吧是论坛的一个部分. 2.关于论坛模块的需求分析? 首先我们看看论坛的几个设计页面: 这个主要是论坛的版块设 ...

  10. Python 函数返回多值

    返回多值函数可以返回多个值吗?答案是肯定的.比如在游戏中经常需要从一个点移动到另一个点,给出坐标.位移和角度,就可以计算出新的坐标:# math包提供了sin()和 cos()函数,我们先用impor ...