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

排序算法的數組實現 -- 合並排序(三)

編輯:C++入門知識

[cpp]
static const int Sentinel_Card = 100000;//哨兵,假設元素值都比它小  
void static Merger(int *a, int p, int q, int r) 

    int L_Size = q - p + 1; 
    int R_Size = r - q; 
     
    int *a1 = new int[L_Size + 1]; 
    int *a2 = new int[R_Size + 1]; 
 
    for (int i = 0; i < L_Size; i++) 
        a1[i] = a[p + i]; 
     
    a1[L_Size] = Sentinel_Card;  
     
    for (int i = 0; i < R_Size; i++) 
    { 
        a2[i] = a[q + 1 + i]; 
    } 
    a2[R_Size] = Sentinel_Card; 
     
    int m = 0, n = 0; 
    for (int i = p; i <= r; i ++) 
    { 
        if(a1[m] < a2[n]) 
        { 
            a[i] = a1[m]; 
            m++; 
        } 
        else 
        { 
            a[i] = a2[n]; 
            n++; 
        } 
 
    } 
 

 
void Merger_Sort(int *a, int p, int r) 

    if(p < r) 
    { 
        int q = (p + r)/2; 
        Merger_Sort(a, p, q); 
        Merger_Sort(a, q + 1, r); 
        Merger(a, p, q, r); 
    } 

static const int Sentinel_Card = 100000;//哨兵,假設元素值都比它小
void static Merger(int *a, int p, int q, int r)
{
 int L_Size = q - p + 1;
 int R_Size = r - q;
 
 int *a1 = new int[L_Size + 1];
 int *a2 = new int[R_Size + 1];

 for (int i = 0; i < L_Size; i++)
  a1[i] = a[p + i];
 
 a1[L_Size] = Sentinel_Card;
 
 for (int i = 0; i < R_Size; i++)
 {
  a2[i] = a[q + 1 + i];
 }
 a2[R_Size] = Sentinel_Card;
 
 int m = 0, n = 0;
 for (int i = p; i <= r; i ++)
 {
  if(a1[m] < a2[n])
  {
   a[i] = a1[m];
   m++;
  }
  else
  {
   a[i] = a2[n];
   n++;
  }

 }

}

void Merger_Sort(int *a, int p, int r)
{
 if(p < r)
 {
  int q = (p + r)/2;
  Merger_Sort(a, p, q);
  Merger_Sort(a, q + 1, r);
  Merger(a, p, q, r);
 }
}

 

作者:wchm_seu

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