合并排序是建立在归并操作上的一种有效的排序算法。该算法也是采取分治的思想。
合并算法是将两个(或两个以上)有序表合并成一个新的有序表,即把带排序的序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表。合并排序也称为归并排序。
方法:
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
浙公网安备 33010602011771号