使用C++实现桶排序算法

桶排序是一种非比较型排序算法,通过将待排序元素分配到多个“桶”中,对每个桶内元素单独排序后合并,实现整体排序。核心是合理划分桶,使每个桶元素数量少,降低排序成本。 以[0,1)范围内的浮点数为例,算法步骤:1. 创建n个空桶(n为数组长度);2. 按元素x的桶索引x*n(取整数部分)分配到对应桶;3. 各桶内用std::sort排序;4. 合并所有桶元素。 C++实现中,`bucketSort`函数通过vector<vector<double>>创建n个桶,遍历元素分配,排序后合并。测试验证了算法正确性。 复杂度:平均时间O(n)(元素均匀分布时),最坏O(n log n)(所有元素入同一桶);空间O(n)。适用于数据分布均匀、范围明确的数值型数据,数据不均时性能退化。 该算法在数据分布合理时高效,尤其适合统计分析中的区间数据排序。

阅读全文
使用C++实现计数排序算法

**计数排序**是一种非比较型排序算法,核心思想是通过统计元素出现次数构建排序数组,适用于整数范围不大的场景(如学生成绩、年龄)。 **基本思路**:以数组`[4,2,2,8,3,3,1]`为例,步骤为:1. 确定最大值(8),创建计数数组`count`统计各元素出现次数(如`count[2]=2`);2. 按计数数组顺序将元素插入结果数组,得到排序结果`[1,2,2,3,3,4,8]`。 **实现要点**:C++代码中,先找最大值,统计次数,构建结果数组并复制回原数组。关键步骤包括计数数组初始化、统计次数、按次数填充结果数组。 **复杂度**:时间复杂度O(n+k)(n为数组长度,k为数据范围),空间复杂度O(k)。 **适用场景**:非负整数且范围小,需高效排序;负数可通过偏移量转换(如加最小值)处理。 计数排序通过“计数-构建”逻辑实现线性时间排序,是处理小范围整数

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

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

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

计数排序是高效非比较型排序算法,适用于整数且取值范围较小的场景,时间复杂度O(n+k)(n为元素数,k为数据范围)。核心步骤:1.确定数据范围(找min和max);2.构建计数数组统计各元素出现次数;3.按顺序输出计数数组元素(次数对应输出次数)。它稳定(重复元素相对顺序不变),内存占用取决于数据范围,适合重复元素多或范围小的整数数据(如考试分数)。Python实现通过边界处理、统计次数等完成排序,测试验证对含重复元素及负数数组的适用性。

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

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

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

桶排序是一种非比较型排序算法,核心是将数据分配到若干“桶”中,桶内局部排序后合并,适用于数据分布均匀、范围不大的场景(如整数且范围可控)。步骤为确定桶数量与范围(如整数范围0到max,桶数max+1),创建对应桶容器,遍历元素分配到对应桶,桶内排序(如用插入排序或内置方法),最后按桶顺序合并元素。时间复杂度理想下为O(n),空间复杂度O(n)。优点是均匀分布时高效,缺点是数据范围大时空间浪费,分布不均时效率下降。

阅读全文