这个最低位优先的基数排序,非常适合移植到硬件设备中,所以,我们提供一个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. 排序算法总结(C语言版)

    排序算法总结(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++代码)

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

  6. 十大经典排序算法(Javascript实现)

    前言 总括: 本文结合动图详细讲述了十大经典排序算法用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. 寻找符合条件的最短子字符串——SLIDING WINDOW

    简介 用一个可伸缩的窗口遍历字符串,时间复杂度大致为O(n).适用于“寻找符合某条件的最小子字符串”题型. 题目 链接 求某字符串T中含有某字符串S的所有字符的最小子字符串.如果不存在则返回" ...

  2. 使用kettle来根据时间戳或者批次号来批量导入数据,达到增量的效果。

    1.Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.下载图形化界面的zip包格式的,直接解压缩使用即可.安装部署模式这里不说了 ...

  3. JavaScript我学之八善变的this---函数执行上下文

    本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘. 函数执行上下文 当函数运行时,通过this,函数可以获取它运行所需的外界环境的相关信息(比如某变量的值,另一个对象的引用等). this引用 ...

  4. lintcode 447 Search in a Big Sorted Array(倍增+二分)

    题意:给一个按照升序排序的正整数数组.这个数组很大以至于只能通过固定的接口ArrayReader->get(k)来访问第k个数.并且也没有办法得知这个数组有多大.找到给出的整数target第一次 ...

  5. Python——文件读取

    我们经常需要从文件中读取数据,因此学会文件的读取很重要,下面来介绍一下文件的读取工作:     1.读取整个文件     pi_digits.text 3.1415926535 8979323846 ...

  6. git操作:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! (警告:远程主机标识已更改!)

    问题背景: 前几日,把云服务器系统由centos改成Ubuntu之后,重新搭建的git服务器环境. 问题描述: 从本机不能clone远程git仓库. 报错如下: @@@@@@@@@@@@@@@@@@@ ...

  7. [Mongo]Linux上启动与关闭MongoDB

    文档地址:https://docs.mongodb.com/v3.0/tutorial/install-mongodb-on-amazon/ 默认配置下,Mongo实例会将其数据文件存放在/var/l ...

  8. Spring MVC工作流程

    本文回答Spring MVC如何处理一个请求的. 1.请求是由中央调度器DispatcherServlet接收的. 2.中央调度器将请求交给处理器映射器HandlerMapping,处理器映射器解析请 ...

  9. WinIo驱动级键盘模拟编程

    转自:http://blog.sina.com.cn/s/blog_455d7a320100vr37.html 前天无聊,翻翻自己的兴趣项目文件夹,发现了这个放下很久的项目!那是大三时候的事了.当时是 ...

  10. CSS3_伸缩盒模型_弹性布局_等分布局_flex 布局

    伸缩盒模型 CSS3 引入的布局模式 Flexbox 布局 主要思想: 让容器有能力让其子项目能够改变其宽度,高度,以最佳方式填充可用空间. 特点: display: flex;    只能控制其子元 ...