Cope with very large numbers. Consider that:
int low = Integer.MAX_VALUE - 2; // = 2147483645 int high = Integer.MAX_VALUE; // = 2147483647 int mid1 = (low + high) / 2; // = -2 int mid2 = low + (high - low) / 2; // = 2147483646 int mid3 = (low + high) >> 1; // = -2 int mid4 = (low + high) >>> 1; // = 2147483646 So we'll use the last one (non-sign-propagating shift) as it is likely to be fastest and clearest. git-svn-id: https://samskivert.googlecode.com/svn/trunk@1850 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -240,7 +240,7 @@ public class ProximityTracker
|
|||||||
int high = _size-1;
|
int high = _size-1;
|
||||||
|
|
||||||
while (low <= high) {
|
while (low <= high) {
|
||||||
int mid = (low + high) >> 1;
|
int mid = (low + high) >>> 1;
|
||||||
int cmp = (_records[mid].x - x);
|
int cmp = (_records[mid].x - x);
|
||||||
|
|
||||||
if (cmp < 0) {
|
if (cmp < 0) {
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ public class ArrayUtil
|
|||||||
{
|
{
|
||||||
int low = offset, high = offset+length-1;
|
int low = offset, high = offset+length-1;
|
||||||
while (low <= high) {
|
while (low <= high) {
|
||||||
int mid = (low + high) >> 1;
|
int mid = (low + high) >>> 1;
|
||||||
T midVal = array[mid];
|
T midVal = array[mid];
|
||||||
int cmp = midVal.compareTo(key);
|
int cmp = midVal.compareTo(key);
|
||||||
if (cmp < 0) {
|
if (cmp < 0) {
|
||||||
@@ -361,7 +361,7 @@ public class ArrayUtil
|
|||||||
{
|
{
|
||||||
int low = offset, high = offset+length-1;
|
int low = offset, high = offset+length-1;
|
||||||
while (low <= high) {
|
while (low <= high) {
|
||||||
int mid = (low + high) >> 1;
|
int mid = (low + high) >>> 1;
|
||||||
T midVal = array[mid];
|
T midVal = array[mid];
|
||||||
int cmp = comp.compare(midVal, key);
|
int cmp = comp.compare(midVal, key);
|
||||||
if (cmp < 0) {
|
if (cmp < 0) {
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class QuickSort
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the middle element in the array is our partitioning element
|
// the middle element in the array is our partitioning element
|
||||||
T mid = a[(lo0 + hi0)/2];
|
T mid = a[(lo0 + hi0) >>> 1];
|
||||||
|
|
||||||
// set up our partitioning boundaries
|
// set up our partitioning boundaries
|
||||||
int lo = lo0-1, hi = hi0+1;
|
int lo = lo0-1, hi = hi0+1;
|
||||||
@@ -164,7 +164,7 @@ public class QuickSort
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the middle element in the array is our partitioning element
|
// the middle element in the array is our partitioning element
|
||||||
T mid = a[(lo0 + hi0)/2];
|
T mid = a[(lo0 + hi0) >>> 1];
|
||||||
|
|
||||||
// set up our partitioning boundaries
|
// set up our partitioning boundaries
|
||||||
int lo = lo0-1, hi = hi0+1;
|
int lo = lo0-1, hi = hi0+1;
|
||||||
@@ -230,7 +230,7 @@ public class QuickSort
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the middle element in the array is our partitioning element
|
// the middle element in the array is our partitioning element
|
||||||
T mid = a[(lo0 + hi0)/2];
|
T mid = a[(lo0 + hi0) >>> 1];
|
||||||
|
|
||||||
// set up our partitioning boundaries
|
// set up our partitioning boundaries
|
||||||
int lo = lo0-1, hi = hi0+1;
|
int lo = lo0-1, hi = hi0+1;
|
||||||
@@ -296,7 +296,7 @@ public class QuickSort
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the middle element in the array is our partitioning element
|
// the middle element in the array is our partitioning element
|
||||||
T mid = a[(lo0 + hi0)/2];
|
T mid = a[(lo0 + hi0) >>> 1];
|
||||||
|
|
||||||
// set up our partitioning boundaries
|
// set up our partitioning boundaries
|
||||||
int lo = lo0-1, hi = hi0+1;
|
int lo = lo0-1, hi = hi0+1;
|
||||||
@@ -421,7 +421,7 @@ public class QuickSort
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the middle element in the array is our partitioning element
|
// the middle element in the array is our partitioning element
|
||||||
T mid = a.get((lo0 + hi0)/2);
|
T mid = a.get((lo0 + hi0) >>> 1);
|
||||||
|
|
||||||
// set up our partitioning boundaries
|
// set up our partitioning boundaries
|
||||||
int lo = lo0-1, hi = hi0+1;
|
int lo = lo0-1, hi = hi0+1;
|
||||||
|
|||||||
Reference in New Issue
Block a user