优化讨论一:
因为mergesort在数组元素比较少的时候开销较大,所以第一种优化即考虑当元素被分割成少于7个元素的时候,直接采用插入排序来解决.
if (left + 6 >= right) {
InsertionSort.insertionSort(array);
return;
} else {
int middle = (left + right) / 2;
mergeSort(array, left, middle);
mergeSort(array, middle + 1, right);
if (more(array[middle + 1], array[middle]))
return;
merge(array, left, middle, right);
}
}
优化讨论二:
当mid指针的元素小于mid+1指针的时候,说明这两个数组已经排好序,所以就可以跳过merge这一步,直接return就可以了。
if (left == right)
return;
else {
int middle = (left + right) / 2;
mergeSort(array, left, middle);
mergeSort(array, middle + 1, right);
if(more(array[middle+1], array[middle]))
return;
merge(array, left, middle, right);
}