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

I needed a program to sort an integer Array alternating, but it gives me a StackOverflow Error

我需要对一个整数数组进行交替排序,但不允许我使用任何包。我在这段代码上坐了很长时间,当它在纸上运行时,我大学使用的测试程序用 Whosebug 评论我的代码。

这是有问题的代码。我只是希望一些有经验的开发人员告诉我出了什么问题。我是 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 是 "working" 数组。

感谢您的时间和关注。如果这对您造成困扰,我很抱歉。我是新手,所以批评是可以的!

你好,T.

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