func mergeSort(arr []int) []int {
length := len(arr)
if length<=1{
return arr
}else{
mid := length/2
leftArr := mergeSort(arr[:mid])
rightArr := mergeSort(arr[mid:])
return merge(leftArr,rightArr)
}
}
func merge(leftArr,rightArr []int) []int {
leftIndex := 0
rightIndex := 0
lastArr := []int{}
for leftIndex < len(leftArr) && rightIndex < len(rightArr) {
if leftArr[leftIndex] > rightArr[rightIndex] {
lastArr = append(lastArr, rightArr[rightIndex])
rightIndex++
} else if leftArr[leftIndex] < rightArr[rightIndex] {
lastArr = append(lastArr, leftArr[leftIndex])
leftIndex++
} else {
lastArr = append(lastArr, leftArr[leftIndex])
lastArr = append(lastArr, rightArr[rightIndex])
rightIndex++
leftIndex++
}
}
for leftIndex < len(leftArr){
lastArr = append(lastArr, leftArr[leftIndex])
leftIndex++
}
for rightIndex < len(rightArr){
lastArr = append(lastArr, rightArr[rightIndex])
rightIndex++
}
return lastArr
}