私はJavaでヒープソート方法を書き込もうとしていますが、私がそれをしたいとまったく働いていない:HeapSortコードの何が問題なのですか?
public class HeapSort {
private static int n;
private static void swap(int[] A, int a, int b)
{
int tmp = A[a];
A[a] = A[b];
A[b] = tmp;
}
private static void insert(int[] A, int i)
{
int left = i * 2;
int right = left + 1;
int max = i;
if (left <= n && A[left] < A[max]){
max = left;
}
if (right <= n && A[right] > A[max]) {
max = right;
}
if (max != i) {
swap(A, i, max);
insert(A, max);
}
}
public static void HeapSort(int[] A)
{
n = A.length - 1;
for (int i = n/2; i >= 0; i--)
insert(A, i);
for (int i = n; i > 0; i--) {
swap(A, 0, i);
n--;
insert(A, 0);
}
}
public static void main(String[] args){
int[] A = new int[] {9, 2, 8, 1, 4};
System.out.println(java.util.Arrays.toString(arr));
HeapSort(A);
System.out.println(java.util.Arrays.toString(arr));
}
}
それは9、2、8、1、4のような配列を取得しますが、いくつかの配列で動作します1、4、2、8、9にソートされています。なぜ、配列を正しい方法でソートしていないのですか?
9,2,8,1,4で動作していますが、19,6,8,1,0で動作しませんでした。0,1,6,8,19が返されました。スワップ28と19? –
さて、更新されたコードが正常に機能します。私が思っているのは、ランタイムが何であるかです。 –