我需要对一个整数数组进行交替排序,并且不允许使用任何包。我坐在这段代码上已经很长时间了,虽然它可以在纸上使用,但我的大学使用的Test程序却用StackOverflow注释了我的代码。
这是有问题的代码。我只是希望一些经验丰富的开发人员告诉我出什么问题了。我对Java很陌生。
public class Functionality {
public static int[] alternateSorting(int[] a) {
int v[] = new int[a.length];
int z = a.length;
if (z == 0) {
System.out.println("Error, empty Array");
return a;
}else {
for ( int i = 0; i < a.length; i++) {
v[i] = a[i];
}
boolean swapped;
do {
swapped = false;
for (int i = 1; i < v.length; i++) {
if (v[i-1] > v[i]) {
int swap = v[i];
v[i] = v[i-1];
v[i-1] = swap;
swapped = true;
}
}
}while (swapped);
for (int f = 0; f < a.length - 1; f++) {
for (int c = f + 1; c < a.length; c++)
if (v[c] == v[f]) {
z = z - 1;
}
}
int b[] = new int[z];
int k = v[0];
int g = v[v.length - 1];
int l = v.length;
int m = 1;
for (int i = 0; i < v.length; i++) {
if ( (i*2)%4 == 0) {
if (v[i] == v[i+1]) {
b[i] = k;
k = v[i+m+1];
m--;
} else if (v[i] != v[i+1]) {
b[i] = k;
k = v[i+m];
m--;
}else{
b[i] = k;
}
}else {
if (v[l - 1] == v[l - 2]) {
b[i] = g;
g = v[l - 3];
l--;
} else if (v[l - 1] != v[l - 2]) {
b[i] = g;
g = v[l - 2];
l--;
} else {
b[i] = g;
}
}
}return b ;
}
}
必须将数组a排序。 b是要返回的数组,而v是“工作”数组。
感谢您的时间和精力。对不起,这麻烦您了。我是这个网站的新手,所以可以批评了!
T,问候
答案 0 :(得分:0)
public class Functionality {
public static void main(String args[]) {
int[] ind = {1, 10, 2, 6, 11, 5};
int res[] = alternateSorting(ind);
for(int i=0; i< res.length; i++) {
System.out.println(res[i]);
}
}
public static int[] alternateSorting(int[] a) {
int v[] = new int[a.length];
int z = a.length;
if (z == 0) {
System.out.println("Error, empty Array");
return a;
} else {
for ( int i = 0; i < a.length; i++) {
v[i] = a[i];
}
boolean swapped;
do {
swapped = false;
for (int i = 1; i < v.length; i++) {
if (v[i-1] > v[i]) {
int swap = v[i];
v[i] = v[i-1];
v[i-1] = swap;
swapped = true;
}
}
} while (swapped);
for (int f = 0; f < a.length; f++) {
for (int c = f + 1; c < a.length; c++)
if (v[c] == v[f]) {
z = z - 1;
}
}
int b[] = new int[z];
int k = v[0];
int g = v[v.length - 1];
int l = v.length;
int m = 1;
for (int i = 0; i < v.length; i++) {
if ( (i*2)%4 == 0) {
if (v[i] == v[i+1]) {
b[i] = k;
k = v[i+m+1];
m--;
} else if (v[i] != v[i+1]) {
b[i] = k;
k = v[i+m];
m--;
} else {
b[i] = k;
}
} else {
if (v[l - 1] == v[l - 2]) {
b[i] = g;
g = v[l - 3];
l--;
} else if (v[l - 1] != v[l - 2]) {
b[i] = g;
g = v[l - 2];
l--;
} else {
b[i] = g;
}
}
}
return b ;
}
}
}
根据您的需求进行改进。这将输出:
1
11
2
10
5
6