Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 计数排序的两种方法_Sorting_Counting Sort - Fatal编程技术网

Sorting 计数排序的两种方法

Sorting 计数排序的两种方法,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

下面是我的两个计数排序的实现

在这个非常简单的实现中,我所做的只是计算元素的出现次数,并插入与输出数组中出现次数相同的次数。 实施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 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+ " ");
    }
}