基数排序-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),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程.我在上一篇 ...
随机推荐
- Log.isLoggable之一正确的使用姿势
DEBUG方法比较当我们在做APP开发时,需要设置调试开关打印Log,下面我列举出3种方法: 方法一:直接赋值public static final boolean DEBUG = true;//fa ...
- 关闭 Visual Studio 的 Browser Link 功能
最近公司弄新项目需要用 MVC,就把 IDE 升级到了 Visual Studio 2013,在开发的时候发现有好多请求一个本地49925的端口 . 很奇怪,一开始以为是 Visual Studio ...
- spark MLlib BasicStatistics 统计学基础
一, jar依赖,jsc创建. package ML.BasicStatistics; import com.google.common.collect.Lists; import org.apach ...
- asp+SqlServer2008开发【第四集:windows server 2008 r2的操作记录】
1,使用powershell server和putty像远程linux一样操作windows服务器,解决使用mstsc命令无法远程桌面的问题. 2,使用IMM管理,使用浏览器查看IBM服务器的工作状况 ...
- (转)urllib库python2和python3具体区别
转载链接:https://blog.csdn.net/whatday/article/details/54710403 Python 2 name Python 3 name urllib.urlre ...
- Elasticsearch大规模时序索引如何治理和规划
什么是时序索引? 其主要特点体现在两个方面, 一存,以时间为轴,数据只有增加,没有变更,并且必须包含timestamp(日期时间,名称随意)字段,其作用和意义要大于数据的id字段,常见的数据比如我们通 ...
- React(v16.8.4)生命周期详解
当前版本v16.8.4 装载过程(组件第一次在DOM树中渲染的过程): constructor(常用) -> getInitialState(v16.0已废弃) -> getDefault ...
- Android的BroadcastReceiver组件
BroadcastReceiver的作用: BroadcastReceiver,是和Intent有很大关系的Android组件. Android中的 Intent 可以用来: 1. 在应用程序内部和应 ...
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Khamovniki
A. Ability Draft 记忆化搜索. #include<stdio.h> #include<iostream> #include<string.h> #i ...
- linux 文件属性(转)
1. 文件类型 - 普通文件 d 目录文件 l 链接文件 b 块设备文件 c 字符型设备文件 s socket文件 p 管道类型文件 块设备文件主要是指慢速设备,比如hd硬盘,数据主要是分块存储,所 ...