基数排序

在基数排序之前,我们先来看一下计数排序:

计数排序是一个非基于比较的排序。它的优势在于对一定范围内的整数排序时,它的时间复杂度为O(n+k)(其中k为整数的范围),快于任何比较排序算法。

计数排序的基本思想就是对每一个输入元素x,确定出小于x的元素的元素的个数,有了这一信息就可以把x归位了。例如,如果数组有6个元素比x小,那么x归为后几位数组中的第7个元素。

实现代码如下:

/*
Author:Ibsen
Data:2015.12.22
*/
//计数排序:时间O(n+k),空间O(n),稳定
#include <iostream>
#include <cstdlib>
using namespace std;
const int maxn=1000;
int A[]={2,4,6,8,0,9,7,5,3,1},n=10,B[maxn],C[maxn];

void Counting_Sort(int A[],int B[],int n,int k)
{//对含有n个元素的数组A进行计数排序,排序结果放在数组B中,保证A中元素最大不超过k
    for(int i=0;i<=k;i++) C[i]=0;
    for(int i=0;i<n;i++) C[ A[i] ]++; //C[i]包含等于i的元素的个数
    for(int i=1;i<=k;i++) C[i]+=C[i-1]; //C[i]包含小于等于i的元素的个数
    for(int i=n-1;i>=0;i--) B[ --C[ A[i] ] ]=A[i];
}
void Display(int B[],int n)
{
    for(int i=0;i<n;i++)
        cout<<B[i]<<" ";
    cout<<endl;
}
int main()
{
    Counting_Sort(A,B,n,10);
    Display(B,n);
    return 0;
}




计数排序的一个重要性质就是它是稳定的:具有相同值的元素在输出数组中的相对次序与他们在输入数组中的相对次序相同。

计数排序可以作为基数排序的一个子过程。

基数排序可以对有多个关键字的元素进行排序。

基数排序首先对所有元素按最低有效位(即“最低位优先(LSD)”也可以按"最高位优先(MSD)")进行排序,然后按次低有效位排序,直到把所有关键字都进行排序。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值