常用的排序算法分为
- 交换排序 ( 冒泡排序 / 快速排序 ) https://blog.csdn.net/qq_39731011/article/details/95204290
- 插入排序 ( 简单插入排序 / 希尔排序 ) https://blog.csdn.net/qq_39731011/article/details/95342246
- 选择排序 ( 简单选择排序 / 堆排序 ) https://blog.csdn.net/qq_39731011/article/details/95457842
- 归并排序 https://blog.csdn.net/qq_39731011/article/details/95614787
- 基数排序 ( 桶排序 ) https://blog.csdn.net/qq_39731011/article/details/95995693
今天要说的是:基数排序(又称桶排序)
关于基数排序,深海说一下自己的见解:
根据数据的(个,十,百,千,....)位数.分别排序后放入对应的"桶"中,最后有序的将"桶"中的数据依次从"桶"中取出,得出有序数组
如下文中,您有别的见解,欢迎评论指正,深海谢过诸位灵长类
深海又要开始画图了!!!
public class RadixSort
{
public static void sort(int[] number, int d) //d表示最大的数有多少位
{
intk = 0;
intn = 1;
intm = 1; //控制键值排序依据在哪一位
int[][]temp = newint[10][number.length]; //数组的第一维表示可能的余数0-9
int[]order = newint[10]; //数组orderp[i]用来表示该位是i的数的个数
while(m <= d)
{
for(inti = 0; i < number.length; i++)
{
intlsd = ((number[i] / n) % 10);
temp[lsd][order[lsd]] = number[i];
order[lsd]++;
}
for(inti = 0; i < 10; i++)
{
if(order[i] != 0)
for(intj = 0; j < order[i]; j++)
{
number[k] = temp[i][j];
k++;
}
order[i] = 0;
}
n *= 10;
k = 0;
m++;
}
}
public static void main(String[] args)
{
int[]data =
{73, 22, 93, 43, 55, 14, 28, 65, 39, 81, 33, 100};
RadixSort.sort(data, 3);
for(inti = 0; i < data.length; i++)
{
System.out.print(data[i] + "");
}
}
}