我需要帮助弄清楚这个分区代码到底出了什么问题。我已经为它挣扎了几天了,似乎无法理解它。
pIdx 是数据透视索引,左边和右边是数组的边界整数选项,数组 a 只是一个数组或存储的长值。
protected static int partition(long[] a, int left, int right, int pIdx) {
//long numbers[] = {4,3,8,9,7,2,1,5};
long pivot = a[pIdx];
swap(a, pIdx, right);
int storeIndex = left;
for(int i=left; i<right; i++) {
if(a[i] <= pivot)
swap(a, i, storeIndex);
}//for
swap(a, right, storeIndex);
return storeIndex;
}//partitio
我尝试修复您的代码。看看这是否适合您。
protected static int partition(long[] a, int left, int right, int pIdx) {
//long numbers[] = {4,3,8,9,7,2,1,5};
long pivot = a[pIdx];
swap(a, pIdx, right);
int storeIndex = left;
for(int i=left; i<right; i++) {
if(a[i] < pivot) {
swap(a, i, storeIndex);
storeIndex = storeIndex + 1;
}
}
swap(a, storeIndex, right);
return storeIndex;
}