归并排序
- 归并排序:
针对两个有序子列的排序
时间复杂度为 O(n)
/*L为左边起始位置,R为右边起始位置,RightEnd为右边终点位置*/
void Marge(ElementType A[],ElementType Temp[],int L,int R,int RightEnd){
LeftEnd=R-1; //LeftEnd为左边终点位置
Tem=L; //存放结果的数组的起始位置
NumElements=Right-L+1; //
while(L<=LeftEnd && R<=RightEnd){
if(A[L]<=A[R])
Temp[Tem++]=A[L++];
else
Temp[Tem++]=A[R++];
}
while(L<=LeftEnd) /*判断条件可以有等号,因为排完元素的子列的最后指针
*肯定大于其终点指针,因为前面的L++(R++)
*/
Temp[Tem++]=A[L++];
while(R<=RightEnd)
Temp[Tem++]=A[R++];
}