当前位置: 首页 > news >正文

常州市网站建设深圳龙岗区布吉街道

常州市网站建设,深圳龙岗区布吉街道,客服网站怎么做,汝州网站制作分治法思想分治法遍历二叉树归并排序快排堆排十大经典排序算法思想 先分别处理局部,再合并结果。分而治之。 使用场景: 快速排序归并排序二叉树相关问题 分治法模板 递归返回条件分段处理合并结果 func traversal(root *TreeNode) ResultType {// …

分治法

  • 思想
  • 分治法遍历二叉树
  • 归并排序
  • 快排
  • 堆排
  • 十大经典排序算法

思想

先分别处理局部,再合并结果。分而治之。
使用场景:

  • 快速排序
  • 归并排序
  • 二叉树相关问题

分治法模板

  1. 递归返回条件
  2. 分段处理
  3. 合并结果
func traversal(root *TreeNode) ResultType  {// nil or leafif root == nil {// do something and return}// DivideResultType left = traversal(root.Left)ResultType right = traversal(root.Right)// ConquerResultType result = Merge from left and rightreturn result
}

分治法遍历二叉树

func preorderTraversal(root *TreeNode) []int {result := divideAndConquer(root)return result
}
func divideAndConquer(root *TreeNode) []int {result := make([]int, 0)// 返回条件(null & leaf)if root == nil {return result}// 分治(Divide)left := divideAndConquer(root.Left)right := divideAndConquer(root.Right)// 合并结果(Conquer)result = append(result, root.Val)result = append(result, left...)result = append(result, right...)return result
}

归并排序

func MergeSort(nums []int) []int {return mergeSort(nums)
}
func mergeSort(nums []int) []int {if len(nums) <= 1 {return nums}// 分治法:divide 分为两段mid := len(nums) / 2left := mergeSort(nums[:mid])right := mergeSort(nums[mid:])// 合并两段数据result := merge(left, right)return result
}
func merge(left, right []int) (result []int) {// 两边数组合并游标l := 0r := 0// 注意不能越界for l < len(left) && r < len(right) {// 谁小合并谁if left[l] > right[r] {result = append(result, right[r])r++} else {result = append(result, left[l])l++}}// 剩余部分合并result = append(result, left[l:]...)result = append(result, right[r:]...)return
}

快排

func QuickSort(nums []int) []int {// 思路:把一个数组分为左右两段,左段小于右段,类似分治法没有合并过程quickSort(nums, 0, len(nums)-1)return nums}
// 原地交换,所以传入交换索引
func quickSort(nums []int, start, end int) {if start < end {// 分治法:dividepivot := partition(nums, start, end)quickSort(nums, 0, pivot-1)quickSort(nums, pivot+1, end)}
}
// 分区
func partition(nums []int, start, end int) int {p := nums[end]i := startfor j := start; j < end; j++ {if nums[j] < p {swap(nums, i, j)i++}}// 把中间的值换为用于比较的基准值swap(nums, i, end)return i
}
func swap(nums []int, i, j int) {t := nums[i]nums[i] = nums[j]nums[j] = t
}

堆排

package mainfunc HeapSort(a []int) []int {//将无序数组a构建为一个大根堆for i := len(a)/2 - 1; i >= 0; i-- {sink(a, i, len(a))}// 然后把前面这段数组继续下沉保持堆结构,如此循环即可for i := len(a) - 1; i >= 1; i-- {// 从后往前把数组变有序swap(a, 0, i)// 前面的长度减一,因为最后一个是有序的sink(a, 0, i)}return a
}
func sink(a []int, i int, length int) {for {// 左节点索引(从0开始,所以左节点为i*2+1)l := i*2 + 1// 右节点索引r := i*2 + 2// idx保存根、左、右三者之间较大值的索引idx := i// 存在左节点,左节点值较大,则取左节点if l < length && a[l] > a[idx] {idx = l}// 存在右节点,且值较大,取右节点if r < length && a[r] > a[idx] {idx = r}// 如果根节点较大,则不用下沉if idx == i {break}// 如果根节点较小,则交换值,并继续下沉swap(a, i, idx)// 继续下沉idx节点i = idx}
}
func swap(a []int, i, j int) {a[i], a[j] = a[j], a[i]
}

十大经典排序算法

十大经典排序算法(动图演示)

http://www.lbrq.cn/news/2496457.html

相关文章:

  • 郑州建立网站百度大数据
  • 网站收录怎么提高快速排名优化系统
  • 河南便宜网站建设价格兰州seo新站优化招商
  • 网站架构图的制作网络营销到底是个啥
  • 企业网站建站元素googleplay安卓版下载
  • 厂字型布局网站例子中国搜索引擎有哪些
  • 在网站做登记表备案 如果修改优化大师破解版app
  • wdcp拒绝访问网站十大免费无代码开发软件
  • wordpress次级目录ftp廊坊seo关键词优化
  • 好看的学校网站模板免费下载关键词歌词含义
  • 徐州建站软件现在有什么推广平台
  • 网站服务器试用百度的总部在哪里
  • 怎么仿别人的网站近几天发生的新闻大事
  • 网站建设教程答允苏州久远网络产品推广宣传方案
  • 广州企业网站建设推荐网店营销策略有哪些
  • 网站建设咨询公国内新闻最新消息今天
  • 珠海市网站建设公司网站建设与优化
  • html模板网站想做电商应该怎么入门
  • 网站建设推广报价单2023年国际新闻大事件10条
  • 品牌建设网站唐山seo
  • 深圳网站设计公司软文推广多少钱
  • 网站建设 精品课程友情链接交换形式有哪些
  • 网站开发课程设计培训网上广告怎么推广
  • 制作一个简单网站seo群发软件
  • 重庆红旗河沟网站建设seo搜索优化专员招聘
  • 广州网站制作公司神马seo服务
  • wordpress 好用的插件推荐优化设计三年级上册语文答案
  • 网站页面优化简单吗长沙seo全网营销
  • 织梦做的网站图片路径在哪万网阿里云域名查询
  • 软装设计公司网站网络推广员怎么做
  • TS面试题
  • 【I】题目解析
  • 8.c语言指针
  • Ubuntu普通用户环境异常问题
  • 【MySQL篇】:MySQL基础了解以及库和表的相关操作
  • 联表实现回显功能