归并排序

96 阅读1分钟
// 归并排序
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
}