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