本质是在TimSort类中用了折半插入法实现
TimSort类
while (left < right) {
int mid = (left + right) >>> 1;
if (c.compare(pivot, a[mid]) < 0)
right = mid;
else
left = mid + 1;
}
比较器的一点思考
class MyComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
//return o1 - o2; //语句一
return o2 - o1; //语句二
}
}
首先要知道,o1 是需要比较的数,o2 是一个标准,比较过程是
o1 - o2
结果为负,则 o1 排到 o2 的前面,此时说明 o1 的数值小于 o2
结果为正,则 o1 排到 o2 的后面,此时说明 o1 的数值大于 o2
结果为0,则 o1 和 o2 并排,此时说明 o1 的数值等于 o2
这种排序方式是从小到大升序排列
o2 - o1
结果为负,则 o1 排到 o2 的前面,此时说明 o1 的数值大于 o2
(此处需要停顿思考一下)
···
这种排序方式是从大到小降序排列