原理是不断一份为二,先分别对两个被分开的排序,在对总体排序
因此,该算法主要分为三步:1.对半划分 2.分别排序 3.合并两半
算法代码如下:
void sort(int array[],int low,int high)//初始输入时,low=0;high=length-1
{
int mid=(low+high)/2; //划分
if(low<high)
{
sort(array,low,mid); //排序
sort(array,mid+1,high); //排序
merge(array,low,mid,high); //合并
}
}
//排序算法
void merge(int array[],int low,int mid,int high)
{
int array_1[high-low];//array1 用来暂存排好序的数组
int i=low,j=mid+1.k=0; //k记录array1 的下标
while (i <= mid && j <= high)
{
if (array[i] < array[j])
array1[k++] = array[i++];
else
array1[k++] = array[j++];
}
while (i <= mid)
array1[k++] = array[i++];
while (j <= high)
array1[k++] = array[j++];
for (i = low, k = 0; i <= high; i++)
array[i] = array1[k++];
}
//合并算法
上述算法得到的是有小到大排列的算法,若想的由大到小的算法,仅需要将merge()函数中的
的大小判断条件改为大于号即可。