我需要一个程序来对整数数组进行交替排序,但是它给了我一个StackOverflow错误

时间:2018-11-10 17:04:24

标签: java arrays sorting alternate

我需要对一个整数数组进行交替排序,并且不允许使用任何包。我坐在这段代码上已经很长时间了,虽然它可以在纸上使用,但我的大学使用的Test程序却用StackOverflow注释了我的代码。

这是有问题的代码。我只是希望一些经验丰富的开发人员告诉我出什么问题了。我对Java很陌生。

public class Functionality {

public static int[] alternateSorting(int[] a) {

    int v[] = new int[a.length];

    int z = a.length;


    if (z == 0) {

        System.out.println("Error, empty Array");
        return a;

    }else {



        for ( int i = 0; i < a.length; i++) {
            v[i] = a[i];
        }

        boolean swapped;

        do {

            swapped = false;
            for (int i = 1; i < v.length; i++) {

                if (v[i-1] > v[i]) {
                    int swap = v[i];
                    v[i] = v[i-1];
                    v[i-1] = swap;
                    swapped = true;
                }
            }
        }while (swapped);



        for (int f = 0; f < a.length - 1; f++) {

            for (int c = f + 1; c < a.length; c++)

                if (v[c] == v[f]) {

                    z = z - 1;


                } 
        }


        int b[]  = new int[z];

        int k = v[0];

        int g = v[v.length - 1];

        int l = v.length;

        int m = 1;

        for (int i = 0; i < v.length; i++) {



            if ( (i*2)%4 == 0) {
                if (v[i] == v[i+1]) {
                    b[i] = k;
                    k = v[i+m+1];
                    m--;
                } else if (v[i] != v[i+1]) {
                    b[i] = k;
                    k = v[i+m];
                    m--;
                }else{
                    b[i] = k;
                }

            }else {
                if (v[l - 1] == v[l - 2]) {
                    b[i] = g;
                    g = v[l - 3];
                    l--;
                } else if (v[l - 1] != v[l - 2]) {
                    b[i] = g;
                    g = v[l - 2];
                    l--;
                } else {
                    b[i] = g;
                }
            }
        }return  b ;
    }

}

必须将数组a排序。 b是要返回的数组,而v是“工作”数组。

感谢您的时间和精力。对不起,这麻烦您了。我是这个网站的新手,所以可以批评了!

T,问候

1 个答案:

答案 0 :(得分:0)

public class Functionality {

    public static void main(String args[]) {
        int[] ind = {1, 10, 2, 6, 11, 5};

        int res[] = alternateSorting(ind);

        for(int i=0; i< res.length; i++) {
            System.out.println(res[i]);    
        }

    }

    public static int[] alternateSorting(int[] a) {

        int v[] = new int[a.length];

        int z = a.length;


        if (z == 0) {

            System.out.println("Error, empty Array");
            return a;

        } else {


            for ( int i = 0; i < a.length; i++) {
                v[i] = a[i];
            }

            boolean swapped;

            do {

                swapped = false;
                for (int i = 1; i < v.length; i++) {

                    if (v[i-1] > v[i]) {
                        int swap = v[i];
                        v[i] = v[i-1];
                        v[i-1] = swap;
                        swapped = true;
                    }
                }
            } while (swapped);



            for (int f = 0; f < a.length; f++) {

                for (int c = f + 1; c < a.length; c++)

                    if (v[c] == v[f]) {

                        z = z - 1;

                    } 
            }


            int b[]  = new int[z];

            int k = v[0];

            int g = v[v.length - 1];

            int l = v.length;

            int m = 1;

            for (int i = 0; i < v.length; i++) {
                if ( (i*2)%4 == 0) {
                    if (v[i] == v[i+1]) {
                        b[i] = k;
                        k = v[i+m+1];
                        m--;
                    } else if (v[i] != v[i+1]) {
                        b[i] = k;
                        k = v[i+m];
                        m--;
                    }  else  {
                        b[i] = k;
                    }

                } else {
                    if (v[l - 1] == v[l - 2]) {
                        b[i] = g;
                        g = v[l - 3];
                        l--;
                    } else if (v[l - 1] != v[l - 2]) {
                        b[i] = g;
                        g = v[l - 2];
                        l--;
                    } else {
                        b[i] = g;
                    }
                }
            }
            return  b ;
        }
    }    
}

根据您的需求进行改进。这将输出:

1
11 
2
10
5
6