[原创]二路归并排序针对数组的场景(C++版)

//二路归并排序时间复杂度ON*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实现。