возникли проблемы с методом быстрой сортировки

1

Поэтому я делаю вызов, расположенный по адресу https://www.hackerrank.com/challenges/quicksort2, и у меня возникают проблемы с тем, чтобы обмануть голову так, как они этого хотят. Они просят программу выполнить quicksort с помощью subArrays, а затем объединить эти вспомогательные массивы в конце, чтобы придумать результат. Вот вызов, и у меня будет мой код ниже. Разумеется, у меня нет работы. Весь код был предоставлен, и задача состоит в том, чтобы написать метод разделения

Print Sub-Arrays В этой задаче напечатайте свой массив каждый раз, когда закончите свой метод разбиения, т.е. Распечатайте каждый отсортированный подматрица. Первый элемент в подматрице должен использоваться как свод. Разделите левую сторону перед разделением правой стороны. Шарнир не должен добавляться ни в одну сторону. Вместо этого поместите его обратно посередине при объединении подмассивов вместе.

Формат ввода

Будут две строки ввода:

n - the size of the array
ar - the n numbers of the array

Выходной формат

Распечатайте каждый секционированный под-массив на новой строке.

Ограничения

1<=n<=1000 
-1000<=x<= 1000 , x ∈ ar
There are no duplicate numbers.

Пример ввода

7
5 8 1 3 7 9 2

Образец вывода

2 3
1 2 3 
7 8 9
1 2 3 5 7 8 9

Код

import java.util.*;

public class Solution {
static int[] result;   
static void partition(int[] ar) {
int p = 0;
    int s = 0;
    int l = 0;
    int small[] = new int[ar.length];
    int pivot[] = new int[ar.length];
    int large[] = new int[ar.length];
    for(int i = 0; i < ar.length; i++){
        if(i == 0 || ar[i]==pivot[0]){
            pivot[p] = ar[i];
            p++;
        }
        else if(ar[i]>pivot[0]){
            large[l] = ar[i];
            l++;
        }
        else if(ar[i]<pivot[0]){
            small[s] = ar[i];
            s++;
        }
    }
    if(s>2){
        int[] smallA = new int[s];
        for(int i = 0; i < s; i ++){
            smallA[i] = small[i];
        }
        partition(smallA);
    }
    if(l>2){
        int[] largeA = new int[l];
        for(int i = 0; i < l; i ++){
            largeA[i] = large[i];
        }
        partition(largeA);
    }

}   

static void printArray(int[] ar) {
    for(int n: ar){
        System.out.print(n+" ");
    }
    System.out.println("");
}

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int[] ar = new int[n];
    result = new int[n];
    for(int i=0;i<n;i++){
       ar[i]=in.nextInt(); 
    }
    partition(ar);
}    
}

я должен использовать этот формат, я могу редактировать метод разделения, но остальное остается за правилами вызова

Теги:
arrays
quicksort

1 ответ

0

Я не проверял ваш код, но это, похоже, работает. Это проще сделать со списком

import java.util.*;

public class quickSorter
{

    public quickSorter()
    {
    }

    public List<Integer> partition(List<Integer> list){

        int pivot = list.get(0);
        List<Integer> result;
        List<Integer> leftSide = new ArrayList<>();
        List<Integer> rightSide = new ArrayList<>();

        for (int i=0;i<list.size();i++){
            if (list.get(i)<pivot){

                leftSide.add(list.get(i));
            }
            else if (list.get(i)>pivot){
                rightSide.add(list.get(i));
            }

        }

        if (leftSide.size()>1){
             result = this.partition(leftSide);
             leftSide=result;
        }
        if (rightSide.size()>1){
             result = this.partition(rightSide);
             rightSide=result;
        }
        List<Integer> combined = new ArrayList<>();
        combined.addAll(leftSide);
        combined.add(pivot);
        combined.addAll(rightSide);
        //print out
        for (int j:combined){
               System.out.print(j+" ");
        }
        System.out.println();



        return combined;
    }


    public static void main(String[] a){

           quickSorter qs = new quickSorter();

           List<Integer> list = new ArrayList<>();

           System.out.println();
           Scanner in = new Scanner(System.in);
           int n = in.nextInt();

           for(int i=0;i<n;i++){
               list.add(in.nextInt()); 
            }
           System.out.println();
           List<Integer> sorted = qs.partition(list);

    }
}
  • 0
    Я согласен, что было бы проще использовать список массивов, но, к сожалению, они ищут нормальные массивы
  • 0
    я не вижу ничего, связанного с типом используемых массивов в задаче
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню