Чтобы напечатать количество шагов, которые выполняет RandomQuickSort. Java-код

У меня есть этот алгоритм Java, и у меня возникают проблемы с печатью количества шагов, необходимых для решения сортировки. Вот код

    /* The main function that implements QuickSort()
    arr[] --> Array to be sorted,
    low --> Starting index,
    high --> Ending index */
    static void sort(int arr[], int low, int high)
    {
        if (low < high)
        {
            /* partIndex is partitioning index, arr[partIndex] is
            now at right place */
            int partIndex = partition(arr, low, high);
 
            // Recursively sort elements before
            // partition and after partition
            sort(arr, low, partIndex-1);
            sort(arr, partIndex+1, high);
        }
    }
 
    /*  print array of size n */
    static void printArray(int arr[])
    {
        int n = arr.length;
        for (int i = 0; i < n; ++i)
            System.out.print(arr[i]+" ");
        System.out.println();
    }
 
    // Driver Code
    public static void main(String args[])
    {
        int[] data = {12,9,4,99,120,1,3,10,23,45,75,69,31,88,101,14,29,91,2,0,77};
               
        System.out.println("Unsorted Array \n" + " "); 
        System.out.print(Arrays.toString(data)+ "\n");
        
        int n = data.length;
        RandomQuicSort.sort(data, 0, n - 1);
 
        //sort(data, 0, n-1);
 
        System.out.println("Sorted array in ascending order");
        System.out.println(Arrays.toString(data)+"\n"); 
        System.out.println("Sorting was completed in: " ); 
        
        printArray(data);
    }
}

Это выход.

Unsorted Array 
 
[12, 9, 4, 99, 120, 1, 3, 10, 23, 45, 75, 69, 31, 88, 101, 14, 29, 91, 2, 0, 77]
9   Was swapped with    120
1   Was swapped with    9
0   Was swapped with    1
3   Was swapped with    10
9   Was swapped with    10
23  Was swapped with    101
23  Was swapped with    75
14  Was swapped with    23
69  Was swapped with    77
31  Was swapped with    75
31  Was swapped with    45
91  Was swapped with    120
101 Was swapped with    120
Sorted array in ascending order
[0, 1, 2, 3, 4, 9, 10, 12, 14, 23, 29, 31, 45, 69, 75, 77, 88, 91, 99, 101, 120]

Sorting was completed in: 
0 1 2 3 4 9 10 12 14 23 29 31 45 69 75 77 88 91 99 101 120 

Я хотел бы изменить последнюю строку Sorting was completed in:, чтобы отобразить количество шагов, которые алгоритм предпринял, чтобы расположить массив в порядке возрастания. Не отсортированный массив, как сейчас. Например, если алгоритм занял 30 шагов, мне нужно отобразить Sorting was completed in: 30 Steps!. Я попытался распечатать class.display();, но выдает сообщение об ошибке.

Помогите пожалуйста мне.

Спасибо.

Как это связано с Python?

Michael Butscher 14.05.2022 17:51

Обычно люди, знающие java, знают и python. Может быть, мое предположение неверно, и я извиняюсь за неправильный тег

New to Programming 14.05.2022 17:54

Совершенно очевидно, что тег python был ошибкой. OP, если я вас понимаю, вы хотите подсчитывать каждый вызов метода сортировки. Если да, то поможет ли простой статический int? И вы увеличиваете его на единицу каждый раз, когда вызывается метод сортировки?

Conor Timlin 14.05.2022 18:43

@ConorTimlin Как бы выглядело решение, которое вы рекомендуете? Кажется, я понимаю, о чем вы говорите, но не могу представить. Я новичок в программировании, и многие вещи до сих пор не даются мне легко.

New to Programming 14.05.2022 19:25

Мне нужно было бы взломать его в IDE, чтобы быть уверенным (посмотрите, что означает модификатор static в java), в основном вы бы определили переменную уровня класса с именем stepsToSort или что-то еще. Инициализируйте его равным 0. Затем в самом конце ваших методов сортировки, непосредственно перед рекурсивным вызовом метода сортировки, они должны увеличить переменную stepsToSort на 1.

Conor Timlin 14.05.2022 19:35

@КонорТимлин. Я использую этот онлайн-компилятор. tutorialspoint.com/compile_java_online.php По какой-то причине мой IntelliJ ломается каждые два дня и перестает работать. Так что я нашел, что это было проще.

New to Programming 14.05.2022 19:42

Я бы порекомендовал eclipse для начинающих программирования на Java. Не знаком с онлайн-средами IDE, но я думаю, что загруженная лучше

Conor Timlin 14.05.2022 20:01

Я на самом деле установил затмение сегодня. Выглядит очень удобно. Постараюсь найти помощь и в другом месте. Спасибо за рекомендации.

New to Programming 14.05.2022 20:09

@ConorTimlin Я смог заставить это работать. Спасибо за вашу помощь.

New to Programming 14.05.2022 20:37

Превосходно. Рада, что вам пригодилась. Я мог бы опубликовать решение как ответ, чтобы вы могли пометить сообщение как решенное.

Conor Timlin 14.05.2022 22:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
10
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отслеживайте вызовы метода сортировки со статическим членом и увеличивайте его на единицу каждый раз, когда функция сортировки запускается следующим образом.

    class RandomQuicSort
{    
    // This Function helps in calculating
    // the inclusive high and low
    public static int stepsToSort = 0;

    static void random(int arr[],int low,int high)

Затем в конце вашего метода сортировки просто увеличьте его следующим образом

static void sort(int arr[], int low, int high)
{
    if (low < high)
    {
        /* partIndex is partitioning index, arr[partIndex] is
        now at right place */
        int partIndex = partition(arr, low, high);

        // Recursively sort elements before
        // partition and after partition
        stepsToSort++;
        sort(arr, low, partIndex-1);
        sort(arr, partIndex+1, high);

     
    }
}

Это только считается. У меня были проблемы с печатью. Проблема была в том, что я не вызывал метод, чтобы использовать «class.display()». Спасибо за помощь мне. :)

New to Programming 15.05.2022 06:56

Другие вопросы по теме