学习算法-基数排序(radix sort)卡片分类(card sort) C++数组实现
基数排序称为卡片分类,这是一个比较早的时间越多,排名方法。
现代计算机出现之前,它已被用于排序老式打孔卡。
说下基数排序的思想。前面我有写一个桶式排序,基数排序的思想是桶式排序的推广。
桶式排序:http://blog.csdn.net/alps1992/article/details/38132593
基数排序的思想是在于仅仅有10个桶。而不是最大数是多少就有多少个桶。假如我们有10个乱序的数字。
第一趟排序之后
| 0 | 1 | 512 | 343 | 64 | 125 | 216 | 27 | 8 | 729 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
表格的第二行是10个桶的列表,第一行是10个数字。
第一趟排序依照个位数相应排序。第二趟依照十位数。一个桶里能放下多个数。
所以要二维数组。也能够用链表来实现。
后面假设写了我再放这里。
以下放代码:
//
// main.cpp
// RadixSort
//
// Created by Alps on 14-7-26.
// Copyright (c) 2014年 chen. All rights reserved.
// #include <iostream>
#include "cmath" using namespace std; int LoopTimes(int Num){
int times = 0; while (Num) {
Num = Num/10;
times++;
} return times;
} void Sort(int *A, int times, int N); void RadixSort(int * A, int Max, int N){
int i = 0;
int times = LoopTimes(Max);
for (i = 0; i < times; i ++) {
Sort(A, i, N);
}
} void Sort(int *A, int times, int N){
int i = 0,k = 0,h = 0,j = 0;
int remainder;
int tmp[10][N];
memset(tmp, '\0', 10*N*sizeof(int));
for (k = 0; k < N; k++) {
remainder = (A[k]/(int)pow(10, times))%10;
while (tmp[remainder][h] != '\0') {
h++;
}
tmp[remainder][h] = A[k];
h = 0;
}
h = 0;
for (i = 0; i < 10; i++) {
for (j = 0; j < N; j++) {
if (tmp[i][j] != '\0') {
A[h] = tmp[i][j];
h++;
}
}
}
} int main(int argc, const char * argv[])
{ int A[]={4, 2, 6, 1, 13, 532, 67, 134, 132, 543};
int N = sizeof(A)/sizeof(int);
int Max = 543;
int i = 0;
// printf("%d\n",N);
RadixSort(A, Max, N);
// printf("%d\n",(int)pow(10, 0));
for (i = 0; i < N; i++) {
printf("%d ",A[i]);
}
printf("\n");
return 0;
}
中间犯了一个错误,Matlab下的10的0功率10^0顺手也给了写这,中间调bug长时间~
版权声明:本文博客原创文章。博客,未经同意,不得转载。
学习算法-基数排序(radix sort)卡片分类(card sort) C++数组实现的更多相关文章
- 经典排序算法 - 基数排序Radix sort
经典排序算法 - 基数排序Radix sort 原理类似桶排序,这里总是须要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,临时忽视十位数 比如 待排序数组[ ...
- [转] 经典排序算法 - 基数排序Radix sort
原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...
- 生成学习算法(Generative Learning algorithms)
一.引言 前面我们谈论到的算法都是在给定\(x\)的情况下直接对\(p(y|x;\theta)\)进行建模.例如,逻辑回归利用\(h_\theta(x)=g(\theta^T x)\)对\(p(y|x ...
- 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类
from:http://www.freebuf.com/articles/system/182566.html 0×01 前言 目前的恶意样本检测方法可以分为两大类:静态检测和动态检测.静态检测是指并 ...
- Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯
(一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解 ...
- 深度信任网络的快速学习算法(Hinton的论文)
也没啥原创,就是在学习深度学习的过程中丰富一下我的博客,嘿嘿. 不喜勿喷! Hinton是深度学习方面的大牛,跟着大牛走一般不会错吧-- 来源:A fast learning algorithm fo ...
- Factorization Machines 学习笔记(四)学习算法
近期学习了一种叫做 Factorization Machines(简称 FM)的算法.它可对随意的实值向量进行预測.其主要长处包含: 1) 可用于高度稀疏数据场景:2) 具有线性的计算复杂度.本文 ...
- win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)
在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下.恰好最近换了一台笔记本,内含一块GTX1 ...
- 提升学习算法简述:AdaBoost, GBDT和XGBoost
1. 历史及演进 提升学习算法,又常常被称为Boosting,其主要思想是集成多个弱分类器,然后线性组合成为强分类器.为什么弱分类算法可以通过线性组合形成强分类算法?其实这是有一定的理论基础的.198 ...
随机推荐
- cocos2dx进阶学习之场景切换
背景 在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下 void CMMenuScene::OnStartCallBack( CCObject *pSender ) { CCDirect ...
- Hdu 1301 Jungle Roads (最小生成树)
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1301 很明显,这是一道“赤裸裸”的最小生成树的问题: 我这里采用了Kruskal算法,当然用Prim算法也 ...
- hadoop、spark/storm等大数据相关视频资料汇总下载
小弟不才,工作中也用到了大数据的相关东西.一開始接触的时候,是通过买来的教学视频入的门.这两天整理了一下自己的视频资料.供各位进行下载. 文档截图:
- UVA 1619 Feel Good(DP)
Bill is developing a new mathematical theory for human emotions. His recent investigations are dedic ...
- cacti气象图调整(批量位置调整、更改生成图大小等)
cacti气象图能够非常直观的看到各个节点的流量.这里用的是CactiEZ中文版 V10 1.调整气象图大小 默认有一个1024像素的背景图可选, 这里我们须要新增一个1600像素的背景图. 背景图自 ...
- MFC工程的复制
MFC工程的复制 [1] 在VS中新建一个同类型的MFC工程. [2] 复制.rc资源文件,用记事本打开旧工程和新工程的.rc文件,将旧工程的对应部分复制到新工程的对应部分,文 ...
- php四舍五入函数(floor、ceil、round与intval)
原文链接:php四舍五入函数(floor.ceil.round与intval) PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法 ...
- Android学习笔记:FrameLayout布局基础
FrameLayout布局的特点是:所有放在布局里的视图组件,都按照层次堆叠在屏幕的左上角,后面的视图组件覆盖前面的. 当然,组件本身是可以控制自己的内部布局的. 一种常见的场景是可以在FrameLa ...
- oschina开源硬件其它开源,开源硬件
硬件驱动/工具 25Linux内核 101桌面环境 40开源字体 58嵌入式操作系统 33输入法 110开源硬件 57开源图书 5开源家居 17物联网 87开源货币/比特币 32NASA 开源项目 1 ...
- Hdu 1404 Digital Deletions
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1404 刚开始想采取找规律的方法解题,可以没有发现规律.无奈,只好采用求PN点的方法. 我们假 ...