当前位置: 代码迷 >> J2SE >> 算法实现求解大神解决办法
  详细解决方案

算法实现求解大神解决办法

热度:6   发布时间:2016-04-23 20:07:40.0
算法实现求解大神
class Demo{
static int[]aux;
public static void mergesort(int[]a){
aux = new int[a.length];
sort(a,0,a.length-1);
}
public static void sort(int[]a,int left,int right){
if(left>=right)return;
int mid = (left+right)/2;
sort(a,left,mid);
sort(a,mid+1,right);
merge(a,left,mid,right);


}
public static void merge(int[]a,int left,int mid,int right){
int i = left;
int j = mid+1;
for(int k=left;k<=right;k++)
aux[k]=a[k];
for(int k =left;k<=right;k++){
if(i>mid)a[k]=aux[j++];
if(j>right)a[k]=aux[i++];
if(aux[i]<aux[j])a[k]=a[i++];
if(aux[i]>aux[j])a[k]=a[j++];
}
}
public static void main(String args[]){
int[]a ={1,2,6,5,4};
mergesort(a);
for(int b:a)
System.out.print(b);
}

运行一直报错,求解。
------解决思路----------------------

package com.sort;

public class Main {
static int[] aux;

public static void mergesort(int[] a) {
aux = new int[a.length];
sort(a, 0, a.length - 1);
}

public static void sort(int[] a, int left, int right) {
if (left >= right)
return;
int mid = (left + right) / 2;
sort(a, left, mid);
sort(a, mid + 1, right);
merge(a, left, mid, right);

}

public static void merge(int[] a, int left, int mid, int right) {
int i = left;
int j = mid + 1;
for (int k = left; k <= right; k++)
aux[k] = a[k];
for (int k = left; k <= right; k++) {
if (i > mid) {
while (j <= right)
a[k++] = aux[j++];
return;
}
if (j > right) {
while (i <= mid)
a[k++] = aux[i++];
return;
}
if (aux[i] < aux[j]) {
a[k] = aux[i++];
} else {
a[k] = aux[j++];
}
}
}

public static void main(String args[]) {
int[] a = { 1, 2, 6, 5, 4, 4,7};
mergesort(a);
for (int b : a)
System.out.print(b);
}
}

  相关解决方案