Мне нужна была программа для сортировки чередующегося целочисленного массива, но она выдает ошибку StackOverflow - PullRequest
0 голосов
/ 10 ноября 2018

Мне нужно отсортировать чередующийся целочисленный массив, и мне не разрешено использовать какие-либо пакеты. Я долго сижу над этим кодом, и хотя он работает на бумаге, программа тестирования, которую использует мой университет, комментирует мой код с помощью 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 - «рабочий» массив.

Спасибо за ваше время и внимание. Извините, если это беспокоит вас. Я новичок в этом сайте, так что критика в порядке!

Привет, Т.

1 Ответ

0 голосов
/ 10 ноября 2018
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
...