基数排序及其思想 C++代码实现及分析 恋上数据结构笔记

本文详细介绍了基数排序的算法思想,通过个位、十位、百位等逐位排序确保数字的正确顺序。文章探讨了如何取数字的各位位数,并分析了计数排序的稳定性。同时,提供了基数排序的C++代码实现,包括计数排序函数和基数排序函数,以及可视化输出过程,帮助理解算法工作原理。此外,还提到了另一种解决问题的思路。
摘要由CSDN通过智能技术生成

复习梗概

  1. 思想
  2. 如何取数字各个位位数
  3. 计数排序保证稳定性怎么保证

算法思想

  1. 基数排序思想:本质是按照个位数字,十位数字,百位数字。。。分别对数组进行排序
  2. 在排序高位的时候,就把前面低位的最终顺序完全确定了,直到排到最高位就完全确定顺序
    而因为每位数字都是0-9的范围,又正好可以采用计数排序
  3. 思想不难,主要把思想转换成代码有一定难度,要注意如何取到每一位上的位数:个位:X/1%10 十位:X/10%10 百位:X/100%10
  4. 也要注意计数排序的写法细节,以及在位数和原元素索引之间的转换
输入数组:
9 6 7 5 8 8 29 15 11 10
计数排序基础版
计数数组【0-9】
次数 1 1 0 0 0 2 1 1 2 2
次数 1 2 0 0 0 4 5 6 8 10
按个位排序: 10 11 5 15 6 7 8 8 9 29
计数数组【0-9】
次数 6 3 1 0 0 0 0 0 0 0
次数 6 9 10 0 0 0 0 0 0 0
按十位排序: 5 6 7 8 8 9 10 11 15 29

排序结果:
5 6 7 8 8 9 10 11 15 29

时间及空间复杂度

在这里插入图片描述


基数排序基础版代码 及输出结果

计数排序函数

void countingSort(vector<int> &array,int radix){
   
    int * countArray = new int[10]{
   0}; //!计数数组,注意这里的10是数组长度,不是索引啊啊啊啊,和java一样
    for(int i = 0;i<array.size();i++){
   
        countArray[array[i]/radix%10]++;
    }

    arrayPrint(countArray,10);
    cout<<endl;

    int locatingNum = 0; //!对计数数组的计数值进行累加,解决稳定性问题,详情见计数排序笔记
    for(int i = 0;i<10;i++){
   
        if(countArray[i]==0){
   
            continue;
        }
        locatingNum = locatingNum+countArray[i];
        countArray[i] = locatingNum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值