文章目录
🐒个人主页:信计2102罗铠威
🏅算法思维框架
📖前言:
本篇博客主要以介绍十大排序算法中的计数排序和桶排序以及基数排序,有详细的图解、动画演示、良好的代码注释,帮助加深对这些算法的理解,进行查漏补缺~
🎀计数排序 时间复杂度O(n+k)
当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 O(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。
计数排序需要拿一个辅助数组来统计待排序数组中元素的数量,再将统计的结果从小到大回填到待排序数组中。
🎇1. 算法步骤思想
(1)找出待排序的数组中最大的元素
(2)统计数组中每个值为i的元素出现的次数,存入数组C的第i项
(3)对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
(4)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1
🎇2.动画实现
🎇 3.代码实现
//使用前提:arr【】中的元素介于【0,k】 k值不要太大,
// 思路启示:如果元素值介于【-1000,1000】,可以创建一个【0,2000】的辅助数组下标0 对应 -1000平移一下,来统计。回填时再-1000就行了
public void sort(int[] arr){
if(arr==null||arr.length<2){
return;
}
//利用哈希数组temp[]进行排序,将arr[]中的值作为temp[]的键进行存储,统计其出现的数量
int maxVal=arr[0];
for (int i = 1; i <arr.length ; i++) {
//获取arr[]数组中的最大值
maxVal=maxVal<arr[i]?arr[i]:maxVal;
}
int[] temp=new int[maxVal+1];//哈希数组--统计数量
for (int i : arr) {
temp[