У меня есть этот алгоритм 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();
, но выдает сообщение об ошибке.
Помогите пожалуйста мне.
Спасибо.
Обычно люди, знающие java, знают и python. Может быть, мое предположение неверно, и я извиняюсь за неправильный тег
Совершенно очевидно, что тег python был ошибкой. OP, если я вас понимаю, вы хотите подсчитывать каждый вызов метода сортировки. Если да, то поможет ли простой статический int? И вы увеличиваете его на единицу каждый раз, когда вызывается метод сортировки?
@ConorTimlin Как бы выглядело решение, которое вы рекомендуете? Кажется, я понимаю, о чем вы говорите, но не могу представить. Я новичок в программировании, и многие вещи до сих пор не даются мне легко.
Мне нужно было бы взломать его в IDE, чтобы быть уверенным (посмотрите, что означает модификатор static в java), в основном вы бы определили переменную уровня класса с именем stepsToSort или что-то еще. Инициализируйте его равным 0. Затем в самом конце ваших методов сортировки, непосредственно перед рекурсивным вызовом метода сортировки, они должны увеличить переменную stepsToSort на 1.
@КонорТимлин. Я использую этот онлайн-компилятор. tutorialspoint.com/compile_java_online.php По какой-то причине мой IntelliJ ломается каждые два дня и перестает работать. Так что я нашел, что это было проще.
Я бы порекомендовал eclipse для начинающих программирования на Java. Не знаком с онлайн-средами IDE, но я думаю, что загруженная лучше
Я на самом деле установил затмение сегодня. Выглядит очень удобно. Постараюсь найти помощь и в другом месте. Спасибо за рекомендации.
@ConorTimlin Я смог заставить это работать. Спасибо за вашу помощь.
Превосходно. Рада, что вам пригодилась. Я мог бы опубликовать решение как ответ, чтобы вы могли пометить сообщение как решенное.
Отслеживайте вызовы метода сортировки со статическим членом и увеличивайте его на единицу каждый раз, когда функция сортировки запускается следующим образом.
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()». Спасибо за помощь мне. :)
Как это связано с Python?