2.歸并排序的優(yōu)化

主要介紹兩個地方的優(yōu)化:

// 遞歸使用歸并排序,對arr[l...r]的范圍進行排序
template<typename T>
void __mergeSort2(T arr[], int l, int r){

    //優(yōu)化1:
    // 對于小規(guī)模數(shù)組,使用插入排序
    if( r - l <= 15 ){
        insertionSort(arr, l, r);
        return;
    }

    int mid = (l+r)/2;
    __mergeSort2(arr, l, mid);
    __mergeSort2(arr, mid+1, r);
    // 對于arr[mid] <= arr[mid+1]的情況,不進行merge
    // 對于近乎有序的數(shù)組非常有效,但是對于一般情況,有一定的性能損失
    //優(yōu)化2:
    if( arr[mid] > arr[mid+1] )
        __merge(arr, l, mid, r);
}

對于優(yōu)化1來講,對于近乎所有的高級排序算法 都存在一種優(yōu)化就是遞歸到底的情況,當我們遞歸到數(shù)據(jù)元素非常少時轉而使用插入排序,數(shù)據(jù)比較少時,數(shù)組近乎有序的概率就比較大。

對于優(yōu)化2來講,是對于非常有序的數(shù)組才有效,但是對于一般情況,有一定的性能損失,損失在比較操作上。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容