这个最低位优先的基数排序,非常适合移植到硬件设备中,所以,我们提供一个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. oracle下查询的sql已经超出IIS响应时间

    场景: 最近一直发生oracle下查询的sql已经超出IIS响应时间,但是后台DB的SQL查询还未终止,一直在查询.这对DB是造成很大的压力. 解决办法 增加OracleCommand 中的Comma ...

  2. (转)urllib库python2和python3具体区别

    转载链接:https://blog.csdn.net/whatday/article/details/54710403 Python 2 name Python 3 name urllib.urlre ...

  3. Vue学习陷阱

    v-for在嵌套时index没办法重复用,内循环与外循环不能共用一个index <swiper-item v-for="(items,index) in swiperList" ...

  4. python3类方法与静态方法

    静态⽅法和类⽅法 转载于:https://blog.csdn.net/qq_41020281/article/details/79634707 1. 类⽅法 是类对象所拥有的⽅法,需要⽤修饰器 @cl ...

  5. opencv 常用头文件介绍

    1.OpenCV包含的模块 cv – 核心函数库 cvaux – 辅助函数库 cxcore – 数据结构与线性代数库 highgui – GUI函数库 ml – 机器学习函数库 2.常用头文件: #i ...

  6. [LeetCode] Largest Triangle Area 最大的三角区域

    You have a list of points in the plane. Return the area of the largest triangle that can be formed b ...

  7. 如何安装Magento 2.0

    //来源:http://www.360magento.com/blog/install-magento2 如何安装Magento 2.0 2015/8/11 下午4:23 发布者: shi yong ...

  8. PageAdmin Cms V2.0 getshell 0day

    黑小子在土司公布了“PageAdmin cms getshell Oday”,并给出了一个漏 洞的利用EXP.经过危险漫步在虚拟机里测试,存在漏洞的是PageAdmin Cms的次最薪版本PageAd ...

  9. Python---函数的相关知识点总结一:

    1:定义函数 def printInfo(): print("I love Python!") #调用函数 #注意:函数定义完毕并不会被默认执行,只能通过调用的方式来让它执行 pr ...

  10. 第二次C语言实验

    Part1: printf(),scanf()函数的用法 /* C语言程序设计教程学习指导>p119 实验内容(2) 这是一个格式化输入输出函数及格式符使用练习 找出两处错误,修改并运行程序 为 ...