首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。
其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,...
分类:
编程语言 时间:
2015-04-18 08:50:47
阅读次数:
162
(java版)import java.util.ArrayList;import java.util.List;public class radixSort { public static void sort(int[] a){ //首先确定排序的趟数 int max = a[0]; for(...
分类:
编程语言 时间:
2015-04-17 23:40:09
阅读次数:
169
//基数排序
#include
#include
#include
#include
#define maxn 100
using namespace std;
int a[maxn];
int n=0;
int bits=0;
vector barrel[10];
int bitnum(int n)
{
int result=0;
while...
分类:
编程语言 时间:
2015-04-15 23:23:56
阅读次数:
208
线性时间排序
1.计数排序
2.基数排序
3.桶排序...
分类:
编程语言 时间:
2015-04-14 19:42:38
阅读次数:
249
首先来看两个经典引理:
引理1:给定n个d位数,每一个数位可以取k种可能的值。基数排序算法能以 θ(d(n+k))的时间正确地对这些数进行排序。
引理2:给定n个b位数和任何正整数r θ((b/r)(n+2^r))时间内正确地对这些数进行排序。
下面是基数排序的LSD法(最低位优先)程序实现:
#include
#include
using namespace std;
//返回数字的第...
分类:
编程语言 时间:
2015-04-12 09:20:19
阅读次数:
189
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace R...
分类:
编程语言 时间:
2015-04-11 17:34:16
阅读次数:
163
基数排序又称桶排序,对排序数组的每一位进行比较后排序,依次对每一位排序完成,最终就可以得到整个数组的排序。...
分类:
编程语言 时间:
2015-04-11 09:00:55
阅读次数:
127
计数排序的基本思想就是对每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以把x直接放到它在最终输出数组中的位置上。
计数排序的一个重要性质就是它是稳定的,为什么重要呢?因为计数排序经常用作基数排序算法的一个子过程。
废话少说,直接上代码:
#include
//计数排序,k:数组A中最大的元素; i:数组A元素的个数
int* CountSort(int* A, int* B...
分类:
编程语言 时间:
2015-04-10 22:06:47
阅读次数:
133
第一步,先按数据的长度排序,计算出数据的长度(一般大小为正整数),然后按计数排序的方法排序第二步,对相同长度的数据进行基数排序。基数排序采用计数排序作为稳定排序。这里遇到了一些问题,1) 数组到底是按参数传入还是在被调用函数内部分配?2) 第二问里面a#include #include using ...
分类:
编程语言 时间:
2015-04-09 23:21:41
阅读次数:
259
基数排序(radix
sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O
(nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法...
分类:
编程语言 时间:
2015-04-04 09:18:12
阅读次数:
207