合并排序是建立在归并操作上的一种有效的排序算法。该算法也是采取分治的思想。

     合并算法是将两个(或两个以上)有序表合并成一个新的有序表,即把带排序的序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

      将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表。合并排序也称为归并排序。

     方法:

public void MergeSort(int[] arr,int low,int high)
{
     int mid;
     if(low<high)
     {
           mid=(low+high)/2;
           MergeSort(arr,low,mid);
           MergeSort(arr,mid+1,high);
           Merge(arr,low,mid,high);
     }
}

public void Merge(int[] arr,int low,int mid,int high)
{
     int i=low,j=mid+1,k=0;
     int[] temp=new int[high-low+1]
     while(i<=mid&&j<=high)
     {
           if(arr[i]<arr[j])
           {
                temp[k]=arr[i];
                i++;
                k++; 
           }          
           else
           {
                 temp[k]=arr[j];
                 j++;
                 k++;
            }
     }
     while(i<=mid)
      {
             temp[k]=arr[i];
             i++;
             k++;       
      }
      while(j<=high)
      {
             temp[k]=arr[j];
             j++;
             k++;
       }
      for(int m=0;m<temp.Length;m++)
      {
            arr[m+low]=temp[m];
      }
}

  Merge方法简化之后

public void Merge(int[] arr,int low,int mid,int high)
{
     int i=low,j=mid+1,k=0;
     int[] temp=new int[high-low+1]
     while(i<=mid&&j<=high)
     {
           if(arr[i]<arr[j])
           {
                temp[k++]=arr[i++];               
           }          
           else
           {
                 temp[k++]=arr[j++];               
            }
     }
     while(i<=mid)
      {
             temp[k++]=arr[i++];                 
      }
      while(j<=high)
      {
             temp[k++]=arr[j++];
       }
      for(int m=0;m<k;m++)
      {
            arr[m+low]=temp[m];
      }
}

  

 posted on 2015-11-28 17:37  会飞的金鱼  阅读(122)  评论(0)    收藏  举报