使用C++实现基数排序算法

基数排序是一种非比较型整数排序算法,采用最低有效位优先(LSD)方式,按数字每一位(个位、十位等)排序,无需比较元素大小。其核心思想是通过稳定的计数排序处理每一位,确保低位排序结果在高位排序中保持有序。 实现步骤:1. 找出数组最大数,确定需处理的最高位数;2. 从低位到高位,对每一位用计数排序处理:统计当前位数字频次,计算位置,从后往前稳定放置元素,最后复制回原数组。 C++代码中,`countingSort`辅助函数实现按位排序(统计频次、计算位置、稳定放置),`radixSort`主函数循环处理每一位。时间复杂度为O(d×(n+k))(d为最大位数,n为数组长度,k=10),适用于整数范围较大的场景。其核心是利用计数排序的稳定性,确保低位排序结果在高位排序中不被破坏。测试结果显示排序后数组有序,验证了算法有效性。

阅读全文
使用Python实现基数排序算法

基数排序是一种非比较型整数排序算法,核心思想是按数字每一位(从低位到高位)分桶收集。基本步骤:先确定数组中最大数的位数,再从最低位到最高位,对每一位数字进行“分桶”(0-9共10个桶)和“收集”操作,将当前位数字相同的元素放入同一桶,按桶顺序收集更新数组,直至所有位处理完毕。Python实现通过循环位数、计算当前位数字分桶并收集,时间复杂度为O(d×(n+k))(d为最大数位数,n为数组长度,k=10),空间复杂度O(n+k)。适合位数少的整数数组,处理负数时可先转正数排序再恢复符号。

阅读全文
使用Java实现基数排序算法

基数排序是一种非比较型整数排序算法,通过按数位从低位到高位处理数字,将每个数字按当前数位分配到“桶”中,再按桶顺序收集回原数组,重复直至所有数位处理完毕,适合位数少的整数,效率较高。基本思想是“分配-收集-重复”:按当前数位(个位、十位等)分配到对应桶,按桶顺序收集回数组,循环处理所有数位。 以数组[5,3,8,12,23,100]为例,经个位、十位、百位三轮处理完成排序。Java代码中,通过找到最大数确定最高数位,用`(num / radix) % 10`获取当前位,以ArrayList为桶实现分配收集。时间复杂度O(d(n+k))(d为最大数位数,k=10),空间O(n+k)。该算法稳定,适合整数排序,负数可分离正负后分别排序再合并。

阅读全文