学习算法-基数排序(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 ...
随机推荐
- 转: c++继承中的内存布局
英文原文: http://www.openrce.org/articles/files/jangrayhood.pdf 翻译: http://blog.csdn.net/jiangyi711/arti ...
- android 破解九宫格
将目录切换到D:/adb目录下,命令如下 敲入命令 adb shell 然后回车,可以见到如下结果 再敲入命令cd /data/system然后回车, 再执行 rm gesture.key 回车,搞定 ...
- listview,fragment结合起来
这是csdn上的以个demo,很适合初学者.来源:http://download.csdn.net/detail/endlife99/7274419,侵删. MainActiviy: package ...
- tomcat编译通过问题
tomcat 编译后 的类 和 网站目录不能同名!
- HDU 3899 简单树形DP
题意:一棵树,给出每个点的权值和每条边的长度, 点j到点i的代价为点j的权值乘以连接i和j的边的长度.求点x使得所有点到点x的代价最小,输出 虽然还是不太懂树形DP是什么意思,先把代码贴出来把. 这道 ...
- jsp字段判空
是对象吧String jsp的写法 <% if(str == null) { %> str is null <% } else { %> str not null <% ...
- Nutch 是一个开源Java 实现的搜索引擎
Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch的创始人是Doug Cutting,他同时也是Lucene.Hado ...
- windows下以指定用户访问SMB服务器进行读写
需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...
- HDU 4617Weapon(两条异面直线的距离)
Weapon Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Sub ...
- Android新增API之AudioEffect中文API与应用实例
在Android2.3中增加了对音频混响的支持,这些API包含在android.media.audiofx包中. 一.概述 AudioEffect是android audio framework(an ...