Sorting 计数排序的两种方法
下面是我的两个计数排序的实现 在这个非常简单的实现中,我所做的只是计算元素的出现次数,并插入与输出数组中出现次数相同的次数。 实施1Sorting 计数排序的两种方法,sorting,counting-sort,Sorting,Counting Sort,下面是我的两个计数排序的实现 在这个非常简单的实现中,我所做的只是计算元素的出现次数,并插入与输出数组中出现次数相同的次数。 实施1 public class Simple { static int[] a = {5,6,6,4,4,4,8,8,8,9,4,4,3,3,4}; public static void main(String[] args) { fun(a); print(a); } static void
public class Simple
{
static int[] a = {5,6,6,4,4,4,8,8,8,9,4,4,3,3,4};
public static void main(String[] args)
{
fun(a);
print(a);
}
static void fun(int[] a)
{
int max = findMax(a);
int[] temp = new int[max+1];
for(int i = 0;i<a.length;i++)
{
temp[a[i]]++;
}
print(temp);
//print(temp);
int k = 0;
for(int i = 0;i<temp.length;i++)
{
for(int j = 0;j<temp[i];j++)
a[k++] = i;
}
print(a);
}
static int findMax(int[] a)
{
int max = a[0];
for(int i= 1;i<a.length;i++)
{
if(a[i] > max)
max = a[i];
}
return max;
}
static void print(int[] a)
{
for(int i = 0;i<a.length;i++)
System.out.print(a[i] + " ");
System.out.println("");
}
}
公共类简单
{
静态int[]a={5,6,6,4,4,4,8,8,8,9,4,4,3,3,4};
公共静态void main(字符串[]args)
{
乐趣(a);
印刷品(a);
}
静态无效乐趣(int[]a)
{
int max=findMax(a);
int[]temp=新int[max+1];
对于(int i=0;我知道这已经很晚了,但如果其他人在这里遇到了问题:第一个版本对于整型排序非常合适。但是,您通常希望通过键对其他数据类型进行排序。第二个更复杂的版本是稳定的,即同一个键的元素在输出中保持其顺序。
public class NotVerySimple {
public static void main(String[] args) {
static int[] a = {5,6,6,4,4,4,8,8,8,9,4,4,3,3,4};
sort(a);
}
static void sort(int[] a)
{
int min = smallest(a);
int max = largest(a);
int[] A = new int[max - min + 1];
for(int i = 0;i<a.length;i++)
{
A[a[i] - min]++;
}
for(int i = 1;i<A.length;i++)
A[i] = A[i-1] + A[i];
int[] B = new int[a.length];
for(int i = 0;i<a.length;i++)
{
B[ A[a[i] - min] - 1 ] = a[i];
A[a[i] - min]--;
}
print(B);
}
static int smallest(int[] a)
{
int ret = a[0];
for(int i = 1;i<a.length;i++)
{
if(a[i] < ret)
ret = a[i];
}
return ret;
}
static int largest(int[] a)
{
int ret = a[0];
for(int i = 1;i<a.length;i++)
{
if(a[i] > ret)
ret = a[i];
}
return ret;
}
static void print(int[] a)
{
for(int x : a)
System.out.print(x+ " ");
}
}