// mergeSortImplAuxArrayBased split the array to two parts, then recurses call itself for them.
//  after that merge results of the two parts.
// Same process flow as mergeSortImpl
mergeSortImplAuxArrayBased split the array to two parts, then recurses call itself for them.
after that merge results of the two parts.
Same process flow as mergeSortImpl
// mergeSortImplAuxArrayBased split the array to two parts then recurses call itself for them . // after that merge results of the two parts . // Same process flow as mergeSortImpl
func mergeSortImplAuxArrayBased(in []int, p, r int) {
	if p < r {
		q := (p + r) / 2
		mergeSortImplAuxArrayBased(in, p, q)
		mergeSortImplAuxArrayBased(in, q+1, r)
		mergeAuxArrayBased(in, p, q, r)
	}
}
func mergeSortImplAuxArrayBased ( in [ ] int , p , r int ) { if p < r { q := ( p + r ) / 2 mergeSortImplAuxArrayBased ( in , p , q ) mergeSortImplAuxArrayBased ( in , q + 1 , r ) mergeAuxArrayBased ( in , p , q , r ) } }
mergeSortImplAuxArrayBased split the array to two parts, then recurses call itself for them.
mergeSortImplAuxArrayBased split the array to two parts then recurses call itself for them .