[原创]二路归并排序针对数组的场景(C++版)
//二路归并排序时间复杂度O(N*log2N)空间复杂度O(n) 稳定的
int n = 10;
int* B = (int*)malloc((n + 1)*sizeof(int));
void merge(int A[], int low, int mid, int high){
int i, j, k;
for (k = low; k <= high; k++)
B[k] = A[k];
for (i = low, j = mid + 1, k = i; i <= mid&&j <= high;k++){
if (B[i] <= B[j])
A[k] = B[i++];
else
A[k] = B[j++];
}
while (i <= mid) A[k++] = B[i++];
while (j <= high) A[k++] = B[j++];
}
void mergeSort(int A[],int low,int high){
if (low < high){
int mid = (low + high) / 2;
mergeSort(A,low,mid);
mergeSort(A,mid+1,high);
merge(A, low, mid, high);
}
}
这是该算法的经典运用场景,数据结构使用的是数组。
另外该算法还有另外一种应用场景,也就是针对单向链表的场景,这种场景下,时间复杂度没变,但空间复杂度为O(1),也就是空间复杂度降低了,
该场景在我原创的另外一篇博文中有介绍。
目前该算法的数组场景,我只用C++实现了,后面有空会写出相应java实现。