我需要一些帮助。我的教授给我们布置了一个作业,我们需要将这些代码"提取"到一个方法中。有没有办法做到这一点?它是一种堆代码排序算法。我目前确实对编程有一点了解,所以请耐心等待。你可以帮我吗?
import java.util.Arrays;
import java.util.Scanner;
class HeapSort {
private static Scanner sc;
public static void main(String args[]) {
sc = new Scanner(System.in);
System.out.println("Enter no of terms");
int n = sc.nextInt();
System.out.println("Enter the terms");
int arr[] = new int[n];
for (int i = 0; i < n; i++)
arr[i] = sc.nextInt();
System.out.println("The unsorted array is:");
System.out.println(Arrays.toString(arr));
heap(arr);
System.out.println("The sorted array is:");
System.out.println(Arrays.toString(arr));
}
static void heapify(int a[], int n, int i) {
int max, child;
child = 2 * i + 1;
max = i;
if (child < n)
if (a[child] > a[max])
max = child;
if (child + 1 < n)
if (a[child + 1] > a[max])
max = child + 1;
if (max != i) {
int temp = a[i];
a[i] = a[max];
a[max] = temp;
heapify(a, n, max);
}
}
static void buildheap(int a[]) {
for (int i = a.length / 2 - 1; i >= 0; i--)
heapify(a, a.length, i);
}
static void heap(int a[]) {
buildheap(a);
for (int i = a.length - 1; i >= 1; i--) {
int temp = a[0];
a[0] = a[i];
a[i] = temp;
heapify(a, i, 0);
}
}
}
每个方法调用替换为方法的实际主体即可实现目标。当然,鉴于方法参数的命名不佳,这将很快导致各种混乱。
但是这里真正的挑战(可能还有你的实际家庭作业)是你必须重新编写heapify()
方法才能不使用递归。换句话说:你必须在不使用递归的情况下进行堆排序。例如,您可以在此处找到一些指导。
当然:这段代码已经很难阅读了。将所有代码强制到一个方法中将使其不可读且不全面。这就像与良好做法完全相反!
您可以做的一件事是将每个方法中的所有代码替换到调用该方法的位置。
例如,您可以将所有代码移动到调用 heap(arr) 的位置,而不是调用 heap(arr),并继续对其余代码执行此操作。