/**
* 计数排序
* 构建一个数组,存放从0到最大值中每个数的个数,然后依次遍历数据,将数据取出来。
* @author Administrator
*
*/
public class CountSort {
public static void main(String[] args) {
int[] arr = {1,2,3,1,2,34,5,6,3,3};
int gap = getGap(arr);
int[] countSort = countSort(arr,gap);
for (int i : countSort) {
System.out.print(i+" ");
}
}
/**
*
* @param arr 需要排序的数组
* @param gap 最大值和最小值之差,表示可能的元素个数
*/
public static int[] countSort(int[] arr,int gap) {
//创建一个数组
int[] count = new int[gap+1];//计数
int length = arr.length;
int sum = 0;//获取A数组大小用于构造B数组
int[] B = new int[length];//构造B数组
for(int i=0;i<length;i++)
{
count[arr[i]] += 1;// 统计A中各元素个数,存入count数组
}
for(int i=0;i<=gap;i++)//修改C数组
{
sum+=count[i];
count[i]=sum;
}
for(int i=length-1;i>=0;i--)//遍历arr数组,构造B数组
{
B[count[arr[i]]-1]=arr[i];//将A中该元素放到排序后数组B中指定的位置
count[arr[i]]--;//将C中该元素-1,方便存放下一个同样大小的元素
}
return B;//将排序好的数组返回,完成排序
}
public static int getGap(int[] arr) {
if(arr==null||arr.length==0) {
return -1;
}
int max = arr[0];
for(int i=1;i<arr.length;i++) {
if (max<arr[i]) {
max = arr[i];
}
}
return max ;
}
}
排序算法---------计数排序
最新推荐文章于 2020-06-19 15:23:51 发布