【发布时间】:2014-03-10 22:42:59
【问题描述】:
当我使用这个中位数代码来查找 k 的给定位置时,我得到了一个超出范围的异常。我不确定它开始抛出错误的确切大小,但代码适用于大小
private static int mmQuickSortRecursive(Integer[] a, int k) {
if (a.length <= 10)
{
Arrays.sort(a);
return a[k-1];
}
int n = a.length;
// partition L into subsets S[i] of five elements each (n/5 subsets).
ArrayList<Integer[]> list = new ArrayList<Integer[]>();
int cnt = 0;
int m = n/5;
for( int i = 0; i < m; i++ ) {
Integer[] arr = new Integer[5];
for( int j = 0; j < 5; j++ ) {
if( cnt == n )
break;
arr[j] = a[cnt++];
}
Arrays.sort(arr);
list.add(arr);
}
Integer[] x = new Integer[m];
for (int i = 0; i< m; i++ ) {
x[i] = list.get(i)[2];
}
int v = x[0];
if(x.length > 2) {
///////// ERROR THROWN ON BELOW LINE /////////////////
v = (x.length%2 == 0)? x[x.length%2-1]: x[x.length/2];
}
// partition L into 3 parts, L1<M, L2=M, L3>M
Integer[] l = partition_left( a, v );
Integer[] r = partition_right( a, v );
if( k == l.length+1 ) {
return v;
} else if( k <= l.length ){
return mmQuickSortRecursive(l,k);
} else {
return mmQuickSortRecursive(r,k-l.length-1);
}
}
【问题讨论】:
-
使用列表怎么样? stackoverflow.com/a/716619/2399024
-
是的,当我按 Enter 时,它完成了帖子,而不是出于某种原因给我换行符。固定。
标签: java arrays sorting quicksort