基数排序-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),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程.我在上一篇 ...
随机推荐
- python3 解析 base64 数据
在阅读 glTF-Tutorial 教程时遇到了解析 base64 数据的问题. 原始 base64 数据为AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAA ...
- 整理一下python中with的用法
ith替代了之前在python里使用try...finally来做清理工作的方法.基本形式如下: with expression [as variable]: with-block 当expressi ...
- python经典书籍必看:流畅的Python
作者:熊猫烧香 链接:www.pythonheidong.com/blog/article/26/ 来源:python黑洞网 目标读者 本书的目标读者是那些正在使用 Python,又想熟悉 Pytho ...
- 同源策略jsonp和cors
同源策略: 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上 ...
- TreeMap 的排序冲突吗
今天在网上看到一个问题:一个已经构建好的 TreeSet,怎么完成倒排序? 网上给出的答案是: 通过TreeSet构造函数传入一个比较器,指定比较器进行排序为原排序的倒叙. TreeSet的自然排序是 ...
- idea 自定义注释模板
一.类注释模板 打开Preferences Editor -> File and Code Templates -> Files -> Class 效果图: 注释模板 /** * @ ...
- angularjs ng-if 中的ng-model 值作用域问题
现象:最近做了一个需求,页面上使用了ng-if 条件做判断,导致通过使用 $scope 获取不到 ng-model 的值. 问题原因: ng-if这个指令单独开了一个作用域,它只可以继承,不可以进行往 ...
- Tips_一级菜单栏实现
1.纵向 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- angular.injector()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java虚拟机----垃圾回收与内存分配
一.垃圾回收的对象: 在Java的运行时数据区中,程序计数器和虚拟机栈.本地方法栈是随着线程的生灭而生灭,栈当中栈帧的大小在编译的时候已知,在方法结束之后栈帧出栈,这部分的垃圾回收是明确的,因此需要讨 ...