C++实现排序之基数排序

堆排序


前言

基数排序(Radix Sort)是一种非比较型的排序算法,其基本原理是将整数按位数分配,然后按每个位数进行排序。基数排序的稳定性以及时间复杂度与输入数据的分布有关。


一、基数排序是什么?

最高位优先法(MSD)最低位优先法(LSD)

具体数据

二、如何使用

1.源代码

代码如下(示例):

#include<iostream>
#include<algorithm> 
#include<cstring>   
#include<time.h>
using namespace std;
int GetMaxDigit(int *a, int n){
    int maxdata = *max_element(a, a + n); 
    int maxdigit = 0;                   
    while(maxdata){
	maxdata /= 10;
	maxdigit++;
    }
    return maxdigit;
}
void RadixSort(int *a, int n){
    int base = 1, digit = GetMaxDigit(a, n);
    int *tmp = new int[n];               
    int *count = new int[10];              
    int *start = new int[10];             
    while(digit--){
	memset(count, 0, 10 * sizeof(int));
        for(int i = 0; i < n; i++){
            int index = a[i] / base % 10; 
            count[index]++;
        }
        memset(start, 0, 10 * sizeof(int));
        for(int i = 1; i < 10; i++)
            start[i] = count[i - 1] + start[i - 1];
        memset(tmp, 0, n * sizeof(int));
        for(int i = 0; i < n; i++){
            int index = a[i] / base % 10;
            tmp[start[index]++] = a[i];    
        }
        memcpy(a, tmp, n * sizeof(int));  
        base *= 10;                       
    }      
    delete[] tmp;                       
    delete[] count;
    delete[] start;                     
}
void show(int *a, int n){
    for(int i = 0; i < n; i++)
	cout<<*(a + i)<<" ";
    cout<<endl;
}
main(){
    int a[50];
    srand((int)time(0));
    int k = 0;
    while(k < 50)
	a[k++] = rand() % 100 + 1;
    show(a, 50);

    RadixSort(a, 50);
	
    cout<<endl<<endl;
    show(a, 50);
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了基数排序使用,而基数排序算是c++中较难的排序

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值