[ad_1]
Java
private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { for(int k = lo; k <= hi; k++) aux[k] = a[k]; int i = lo, j = mid + 1; for(int k = lo; k <= hi; k++) { if(i > mid) else if(j > hi) else if(less(aux[j], aux[i])) else } } public class Merge { private static void merge(/*...*/) { /* as before */ } private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { if(hi <= lo) return; int mid = lo + (hi - lo) / 2; sort(a, aux, lo, mid); sort(a, aux, mid+1, hi); merge(a, aux, lo, mid, hi); } public static void sort(Comparable[] a) { Comparable[] aux = new Comparable[a.length]; sort(a, aux, 0, a.length - 1); } }
私が試したこと:
コードを見直してみましたが、なぜ実行されないのかまだわかりません。 助けてください
解決策 1
ほとんどの場合、コンパイルされないためです。
Java
for(int k = lo; k <= hi; k++) { if(i > mid) else if(j > hi) else if(less(aux[j], aux[i])) else }
条件付きコードには、条件の後に実行可能な行が含まれていません。それはまったくコンパイルされません。
あなたはこれを持っています:
Java
if (condition) else if (other condition) else
そして、これが必要です:
Java
if (condition) something to do when it is true else if (other condition) something to do when it is true else something to do when neither was true
解決策 2
いくつかの重要な要素が欠落しているため、提供されたコードは実行されていません。 merge メソッドには、具体的には不完全なコード行がいくつかあります。
Java
if(i > mid) else if(j > hi) else if(less(aux[j], aux[i])) else
これらのコード行にはすべて対応するアクションが欠けているため、マージ メソッドが不完全になり、実行できません。 これらのアクションがないと、i が mid よりも大きい、j が hi よりも大きい、または (aux[j]、へ[i]) は真です。
マージ メソッドを機能させるには、不足しているコードを埋める必要があります。
[ad_2]
コメント