程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 合並排序,合並排序算法

合並排序,合並排序算法

編輯:C++入門知識

合並排序,合並排序算法


合並排序

  1. 算法思想

對於輸入的數組a[i , j],將其分為大致相同的2個子集,利用遞歸一直分下去,然後分別對2個子集進行排序(在合並中體現),最終完成排序。

  2. 算法實現

template<class T>
void Copy(T a[], T b[], int left, int right)
{
    for(int i = left; i <= right; i++){
        a[i] = b[i];
    }
} 

template<class T>
void Merge(T a[], T b[], int left, int middle, int right)
{
    int r = middle + 1, k = left;
    while( (left <= middle) && (r <= right) ){
        if(a[left] <= a[r])  b[k++] = a[left++];
        else b[k++] = a[r++];
    }
    while(left <= middle) b[k++] = a[left++];
    while(r <= right) b[k++] = a[r++];
}

template<class T>
void MergeSort(T a[], T b[], int left, int right)
{
    if(left < right){
        int temp = ( (left + right) / 2);
        MergeSort(a,b,left, temp);
        MergeSort(a,b,temp + 1,right);
        Merge(a,b,left,temp,right);
        Copy(a,b,left,right); 
    }
}

3. 算法分析

在Merge排序中,其時間復雜度與輸入數組是否有序無關,最壞時間復雜度和平均時間復雜度均為Ο(nlog(n)),其空間復雜度為Ο(n),體現在輔助數組。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved