我有一项任务,我必须编写一个算法,分析'两个数组。左侧应为奇数,右侧应为偶数。双方应按升序排序。我不允许使用临时数组或现有的api。
我已经设法制作了一个工作方法,问题是一个说100 000整数的数组,完成大约需要15秒。要求是0.1秒,所以我显然有很多需要改进的地方。我不是在寻找一个能给我答案的人,只是在正确的方向上轻推。请不要为我写任何工作代码,但我想知道我写的东西是否以及为什么不好!
到目前为止我所拥有的:
public static void delsortering(int[] a){
int oddnum = 0;
int n = a.length;
for(int k : a){ //finds how many odd numbers there are
if((k & 1) != 0) oddnum++;
}
for(int i = 0; i < n; i++){
if((a[i] & 1) != 0){ //finds odd numbers
for(int j = 0; j < n; j++){
if((a[j] & 1) == 0) //looks for even numbers to change pos with
switch(a, j, i);
}
}
}
for (int i = 0; i < n; i++){
int from = i < oddnum ? 0 : oddnum;
int to = i < oddnum ? oddnum - i: n - i + oddetall;
int m = maxValue(a, from, to); //finds max value in specified range
switch(a, m, to - 1); //puts said max value at specified index
}
}
感谢我能得到的所有帮助!
答案 0 :(得分:3)
更好的解决方案是:
x=0; y=N-1
。x
,直到找到偶数(所有数字,直到现在是奇数 !!!),然后开始向y
移动到左边直到你找到一个奇数(所有你检查的数字,而减少左移y
甚至,直到你找到的第一个奇数!!!)然后你有一个右边的数字和左边的奇数,但没有订购。因此,您可以在上述过程中计算赔率和平均数,以便知道数组中分隔的位置,让我们在k
索引中说出来。
Sort array[0 - k], Sort array[k+1 - N]
。 复杂性: O(n)
第一部分(x,y只移动一次)和O(nlogn)
两种排序O(nlogn)
优于O(n^2)
,这是您的解决方案。