基数排序-LSD
这个最低位优先的基数排序,非常适合移植到硬件设备中,所以,我们提供一个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的更多相关文章
- 十大经典排序算法总结(JavaScript描述)
前言 读者自行尝试可以想看源码戳这,博主在github建了个库,读者可以Clone下来本地尝试.此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:十大经典算法总结 这世界 ...
- 十大经典排序算法的JS版
前言 个人博客:Damonare的个人博客 如遇到问题或有更好的优化方法,可以: 提issue给我 或是pull requests 我都会看到并处理,欢迎Star. 这世界上总存在着那么一些看似相似但 ...
- 排序算法总结(C语言版)
排序算法总结(C语言版) 1. 插入排序 1.1 直接插入排序 1.2 Shell排序 2. 交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择 ...
- JavaScript十大经典排序算法
排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序: 输入:n个数:a1,a2,a3,…,an输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’ 再讲的形象点就是排排坐 ...
- 浅析十大常见排序(含C++代码)
首先声明一下,本文只对十种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的 了解可以参考以下资料: 1.<data structure and algor ...
- 十大经典排序算法(Javascript实现)
前言 总括: 本文结合动图详细讲述了十大经典排序算法用Javascript实现的过程. 原文博客地址:十大经典排序算法 公众号:「菜鸟学前端」,回复「666」,获取一揽子前端技术书籍 人生有情泪沾衣, ...
- 基本排序算法——基数排序java实现
基数排序 package basic.sort; import java.util.Arrays; import java.util.Random; public class RadixSort { ...
- 基数排序 java 实现
基数排序 java 实现 Wikipedia: Radix sort geeksforgeeks: Radix sort 数学之美番外篇:快排为什么那样快 Java排序算法总结(八):基数排序 排序八 ...
- 基数排序详解以及java实现
前言 基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程.我在上一篇 ...
随机推荐
- 移动 ProgramData\Package Cache 文件夹
装完vs2017 发现C盘快木有空间了… 瞅瞅C盘下有啥能删的好释放下空间 就找到了 Package Cache 文件夹,占用空间接近15G… 查查这个文件夹还不建议删除… (http://super ...
- scrapy相关:splash安装 A javascript rendering service 渲染
0. splash: 美人鱼 溅,泼 1.参考 Splash使用初体验 docker在windows下的安装 https://blog.scrapinghub.com/2015/03/02/hand ...
- matplotlib坐标轴刻度-【老鱼学matplotlib】
本节主要讲述如何对坐标轴的刻度字体大小以及背景色进行修改. 例如: import numpy as np import pandas as pd import matplotlib.pyplot as ...
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
- Android读写properties配置文件
写这篇文章之前可以成功运行,文章后就各种找不到文件.所以并没有采用此种方式,后期完善.详见下篇解决方案. 配置文件读取很容易,修改需要注意权限,比如assets目录下就不允许修改. 配置文件的创建: ...
- PSO:利用PSO+ω参数实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度—Jason niu
x = 1:0.01:2; y = sin(10*pi*x) ./ x; figure plot(x, y) title('绘制目标函数曲线图—Jason niu'); hold on c1 = 1. ...
- LeetCode 709.To Lower Case
Description Implement function ToLowerCase() that has a string parameter str, and returns the same s ...
- Python——Redis相关知识
一.连接 Redis import redis 连接方式:redis提供了2个方法 1:StrictRedis:实现大部分官方的命令 2:Redis:是StrictRedis的子类,用于向后兼容旧版的 ...
- css 颜色表示法
css颜色值主要有三种表示方法: (1)颜色名表示,如:red红色,gold金色 (2)rgb表示,如:rgb(255,0,0)表示红色 (3)16进制数值表示,如:#ff0000表示红色,这种可以简 ...
- __x__(44)0910第六天__表单
form表单: form必须属性:action,指定一个服务器地址. 若希望表单中的数据发送给服务器,必须设置name属性. 用户填写的信息,将会追加在url地址?后面,以查询字符串的形式发送给服务器 ...