1.基数排序
基数排序的思想是针对整数的每一位进行排序,它是一种稳定的排序,从个位开始比较,小的再前面,大的排在后面,然后顺次取出,对取出后的数据组针对下一位再进行排序,一直排到位数最多的那一位排完为止!
当桶排序的输入符合均匀分布时,可以期待线性期望时间运行,它的时间复杂度大概为o(n*m);n代表数组长度,m代表最长位的位数。
但桶排序的缺点是耗费空间比较大,而且它并不能排序小数,不过可以先将小数转换为整数,再排序,以及负数,负数要分两部分排,首先是纯正数A那一块先排,然后负数为一块B化为正数再排,然后转换为负数颠倒,然后再加上原先的正数A那一堆组合起来!
示例代码如下:
#include <iostream> #include<vector> using namespace std; vector< vector<int> > myVector;//二维 //后续处理 //取出排序后的数 void follow_Slove(int* A) { int vert = 0; for ( int i=0; i< myVector.size(); i++) { for ( int j=0; j< myVector[i].size(); j++) { A[vert] = myVector[i][j]; vert++; } myVector[i].clear();//移除所有元素 } } /*基数排序,又名桶排序 A:待排数组 len:数组长度 bitLen:最长整数的位数 默认采用10进制数 */ void bucket_Sort(int* A,int len,int bitLen,int scale) { //基于每个数的个位,十位,百位,分别每次排序 int baseValue = 10;//为了求余取出各位数字 int vert; myVector.resize(scale); //每一位 for (int i=0;i<bitLen;i++) { //每一个数 for ( int j=0;j < len;j++) { //注意这里取每一位数的方法 vert = A[j] % baseValue;//这是得到余数 vert = vert / (baseValue/10) ; //这才取到每一位上的数 myVector[ vert ].push_back(A[j]); } //将这一遍的排序后的顺序从vector中取出并保存到原数组A,再进行下一次评价 //以及清空vector,以便下次排序 follow_Slove(A); baseValue = baseValue * 10; //改变求余 } } //计算整数的最长位是多少 void cal_bitLen(int* A,int len,int& bitLen) { int max = -1; //保存最长位 int temp; int count = 1; for ( int i=0; i < len ; i++) { temp = A[i]; count = 0; while ( temp) { temp = temp/10; count++; } if ( count > max) max = count; } bitLen = max ; } int main(void) { int A[6] = {1111,22,22,224,50,0}; int bitLen; cal_bitLen(A,6,bitLen); bucket_Sort(A,6,bitLen,10); for (int i=0;i<6;i++) { cout << A[i]<<" "; } cout<<endl; return 0; }
发表评论
-
QQ中杂七杂八的调用点
2016-03-28 20:52 0QQ中的API调用太多了,在这里做一个记录,方便以 ... -
c++面试题
2013-10-08 21:55 3561. 如何设计一个不能被继承的类 http://sn ... -
各类公司2014笔试题
2013-09-17 09:33 686美团: http://www.itmian4.com/f ... -
面试题汇总
2013-08-30 00:53 7971.题目:给定数组A,大小为n,数组元素为0到n-1的数字 ... -
非递归、仅用一个栈、不加标记数组实现二叉树的后序遍历算法
2013-08-18 23:55 0http://www.cnblogs.com/fin ... -
球称重问题
2013-07-28 22:47 0一般的问题是,如果明确次品球是重或轻,可以直接利用公式 ... -
随机概率相关面试题详解
2013-05-15 10:46 01. 已知有个rand7()的函数,返回1到7随机 ... -
c++---高级技术
2015-01-04 00:13 8111. 异常对象没有专门的头文件。 2.不应该 ... -
深度探索c++对象模型
2013-03-25 16:57 0这本书大概看了 ... -
c++ Primer 学习笔记
2013-03-20 14:28 01.Protected 成员 (1)像private成 ... -
字符串的相关标准函数库重写
2013-03-11 09:59 0#include <iostream> #i ... -
csdn------屌丝们的欢乐算法题
2013-03-08 21:34 01. 1 2 3 ... -
贪心算法---基础篇
2012-08-26 13:20 0理论部分 贪 ... -
计算几何-----判断一个点是否在多边形内
2012-08-20 15:01 0如何判断点在多 ... -
大整数相关运算
2012-08-20 13:52 0既然这是我的暑假任务,那么不管怎样一定要按计划完成了! ... -
编程之美---寻找发帖水王(含扩展问题)
2012-08-19 10:11 0题目:Tango是微软亚洲 ... -
编程之美-----2.21只考加法的面试题
2012-08-12 19:59 0http://www.cnblogs.com/flyinghe ... -
前序+中序==>后序 && 后序+中序==>前序
2012-08-12 09:49 0一. 前序 + 中序 -> 后序 分析: ... -
DE算法学习
2012-08-07 12:38 0DE(差分演化算法) 理论: 这部分内容直接参 ... -
扩展欧几里得与模线性方程
2012-02-05 23:47 0对任意的非负整数a ...
相关推荐
经典排序算法 - 桶排序Bucket sort 经典排序算法 - 插入排序Insertion sort 经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - 归并排序Merge sort 经典排序算法 - ...
基数排序(Radix Sort)是一种非比较排序算法,它的基本思想是将待排序的数组按照位数(个位、十位、百位)进行划分,然后依次对每个位上的数字进行排序,最终得到有序的数组。基数排序的时间复杂度为 O(d(n+k)),...
桶排序算法是一种高效的排序算法,它的工作原理是通过将数组分为几个桶,然后将每个桶中的元素排序,以达到排序的目的。桶排序算法的时间复杂度为O(n+k),因此它适合大规模的数据排序。 10.计数排序算法 计数排序...
8. **计数排序、桶排序、基数排序**:这些是线性时间复杂度的非比较型排序算法,适用于特定的数据分布情况,例如整数排序。 这个压缩包中的Java代码实现可以帮助我们深入理解这些算法的逻辑和细节,同时也可以作为...
answer:这是因为基数排序算法使用了桶排序的思想,每个基数队列中存储的都是相同位数上的数字,因此可以避免关键字的比较,从而提高排序的效率。 本实验报告通过实现基数排序算法来掌握三类内部排序的设计思想、...
非比较排序算法如基数排序、桶排序和计数排序,不依赖于元素间的比较,而是利用了元素的固有特征进行排序,通常在特定条件下具有更高的效率。 #### 三、外部排序 外部排序涉及大量数据,通常超过内存容量,因此...
**基数排序**是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这个过程可以类比为人类按身高排队,然后再按照年龄、姓氏等其他特征进行进一步的排序。基数排序在处理...
**排序算法——C语言实现的基数排序(RadixSort)详解** 在计算机科学中,排序算法是用于将一组数据按照特定顺序排列的算法。这里我们关注的是基数排序(RadixSort),这是一种非比较型整数排序算法,其原理是将...
C语言实现常见排序算法。编译环境:VS2010。 包括: 冒泡排序 快速排序 直接插入排序 Shell排序 直接选择排序 堆排序 归并排序(递归和非递归两种) 桶式排序 基数排序:顺序和静态队列两种方法 索引排序(采用简单...
8. 计数排序、桶排序和基数排序:这三种是线性时间复杂度的非比较排序算法,适用于特定类型的数据,如整数排序。它们不是比较元素之间的大小,而是利用数据特性进行排序。 了解并掌握这些排序算法有助于提升编程...
7. **计数排序**(Counting Sort)、**桶排序**(Bucket Sort)和**基数排序**(Radix Sort):这三种排序算法属于非比较型排序,适用于特定类型的数据。例如,基数排序适用于整数排序,根据每一位进行排序。它们的...
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序尤其有效,尤其是在数值范围较大的情况下。在Linux系统,特别是Ubuntu 13.04这样...
本文将详细介绍九种常见的排序算法,包括冒泡排序、桶排序、计数排序、堆排序、插入排序、合并排序、快速排序、基数排序和选择排序,并特别关注Python语言的实现。 1. **冒泡排序**:这是一种简单的排序算法,通过...
基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序尤其有效,因为其时间复杂度为线性,即O(n*k),其中n是待排序的元素数量,k是每...
在计算机科学中,排序算法是用于对一组数据进行排列的算法。Java 中实现排序算法通常涉及到多种方法,每种算法都有其特定的适用场景和性能特点。下面将详细介绍标题和描述中提到的一些常见排序算法,并提供Java实现...
- **计数排序**、**桶排序**和**基数排序**:适用于特定类型的数据,如非负整数,它们可以在线性时间复杂度内完成排序。 ### 实际应用: 在编程竞赛、数据结构与算法的学习中,选择排序是一个基础概念,有助于理解...
基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别...此外,理解基数排序也有助于你在面对其他非比较型排序算法如计数排序和桶排序时,能够更快速地理解和应用它们。