Famousmai's blog Famousmai's blog
首页
👍 网站介绍
💯 编程分享
✍️ 生活感悟
🎮 游戏人生
📈 网站动态
💌 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Famous Mai

爱玩辅助的后端小哥
首页
👍 网站介绍
💯 编程分享
✍️ 生活感悟
🎮 游戏人生
📈 网站动态
💌 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 算法

    • 数组
    • 链表
    • 字符串
    • 04.排序
      • 归并排序
      • 快速排序
  • 学习笔记

  • 踩坑记录

  • 面试分享

  • 技术方案文章梳理

  • 设计模式

  • 编程分享
  • 算法
famousmai
2023-03-04
目录

04.排序

# 归并排序

相关题目

  • 912. 排序数组 (opens new window)

题解

func sortArray(nums []int) []int {
    return mergeSort(nums, 0, len(nums) - 1)
}
func mergeSort(nums []int, begin, end int) []int {
    if begin >= end {
        return nums
    }
    mid := (begin + end) /2
    mergeSort(nums, begin,mid)
    mergeSort(nums, mid + 1,end)
    merge(nums, begin,mid,end)
    return nums
}

func merge (nums []int, begin,mid,end int) {
    tmpArr := make([]int, end - begin + 1)
    i := begin
    j := mid + 1
    k := 0

    for ;i<= mid && j <= end;k++ {
        if nums[i] <= nums[j]{
            tmpArr[k] = nums[i]
            i++
        }else {
            tmpArr[k] = nums[j]
            j++
        }
    }

    for ; i<=mid;i++{
        tmpArr[k] = nums[i]
        k++
    }

    for ; j<=end;j++{
        tmpArr[k] = nums[j]
        k++
    }

    copy(nums[begin:end+1],tmpArr)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 快速排序

相关思路链接

  • 快速排序的正确理解方式及运用 (opens new window)
func sortArr(nums []int) []int {
  n := len(nums)
	if n <= 1 {
		return nums
	}
  
	return quickSort(nums, 0,n-1)
}

func quickSort(nums []int, start, end int) []int {
  if start >= end {
		return nums
	}

	i := partition(nums, start, end)
	quickSort(nums, start, i-1)
	quickSort(nums, i+1, end)

	return nums
}

func partition(nums []int, start, end int) int {
	randPivot := rand.Intn(end-start+1) + start // 随机取一个中点
	pivot := nums[randPivot]
	nums[end], nums[randPivot] = nums[randPivot], nums[end]

	i := start
	for j := start; j <= end; j++ {
		if nums[j] > pivot {
			if i != j {
				nums[i], nums[j] = nums[j], nums[i]
			}
      i++
		}
	}
	nums[i], nums[end] = nums[end], nums[i]

	return i

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
编辑 (opens new window)
上次更新: 2023/03/13, 15:10:41
字符串
Golang学习笔记

← 字符串 Golang学习笔记→

最近更新
01
策略模式
03-13
02
单例模式
03-05
03
设计模式介绍
03-05
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式