本质是在TimSort类中用了折半插入法实现
TimSort类while (left < right) {
int mid = (left + right) >>> 1;if (c.compare(pivot, a[mid]) < 0)right = mid;elseleft = mid + 1;}
比较器的一点思考
class MyComparator implements Comparator<Integer> {
@Overridepublic 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 (此处需要停顿思考一下)···
这种排序方式是从大到小降序排列