算法 in Golang:Quicksort(快速排序)

这篇具有很好参考价值的文章主要介绍了算法 in Golang:Quicksort(快速排序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法 in Golang:Quicksort(快速排序)

Quicksort(快速排序)

  • 快速排序 O(nlog2^n),比选择排序要快 O(n²)
  • 在日常生活中经常使用
  • 使用了 D & C 策略(分而治之)

使用 Quicksort 排序数组

  • 不需要排序的数组(也就是 Base Case 基线条件):
    • [],空数组
    • [s],单元素数组
  • 很容易排序的数组:
    • [a, b],两个元素的数组,只需检查它们之间的大小即可,调换位置
  • 3 个元素的数组(例如 [23, 19, 35]):
    • 使用 D & C 策略,简化至基线条件(Base case)
  1. 从数组中随便选一个元素,例如 35,这个元素叫做 pivot(基准元素)

  2. 找到比 pivot 小的元素,找到比 pivot 大的元素,这叫做分区:[23, 19], (35), []

  3. 如果左右两个子数组已排好序(达到基线条件),结果:左边 + [pivot] + 右边

  4. 如果左右两个子数组没排好序(没达到基线条件),那么:

    quicksort(左边) + [pivot] + quicksort(右边)文章来源地址https://www.toymoban.com/news/detail-473635.html

使用 Quicksort 排序数组的步骤

  1. 选择一个 pivot
  2. 将数组分为两个子数组:
    1. 左侧数组的元素都比 pivot 小
    2. 右侧数组的元素都比 pivot 大
  3. 在两个子数组上递归的调用 quicksort

创建项目

~/Code/go via 🐹 v1.20.3 via 🅒 base
➜ mcd quicksort

Code/go/quicksort via 🐹 v1.20.3 via 🅒 base
➜ go mod init quicksort
go: creating new go.mod: module quicksort

Code/go/quicksort via 🐹 v1.20.3 via 🅒 base
➜ c

Code/go/quicksort via 🐹 v1.20.3 via 🅒 base
➜

main.go 代码

package main

import "fmt"

func main() {
	arr := []int{12, 87, 1, 66, 30, 126, 328, 12, 653, 67, 98, 3, 256, 5, 1, 1, 99, 109, 17, 70, 4}
	result := quicksort(arr)
	fmt.Println("result: ", result)
}

func quicksort(arr []int) []int {
	if len(arr) < 2 {
		return arr
	}

	pivot := arr[0]
	var left, right []int

	for _, ele := range arr[1:] {
		if ele <= pivot {
			left = append(left, ele)
		} else {
			right = append(right, ele)
		}
	}
	return append(quicksort(left), append([]int{pivot}, quicksort(right)...)...)
}

运行

Code/go/quicksort via 🐹 v1.20.3 via 🅒 base 
➜ go run main.go       
result:  [1 1 1 3 4 5 12 12 17 30 66 67 70 87 98 99 109 126 256 328 653]

Code/go/quicksort via 🐹 v1.20.3 via 🅒 base took 3.2s 
➜ 

到了这里,关于算法 in Golang:Quicksort(快速排序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sorting Algorithms in Python (排序算法)

    本篇文章主要介绍几种经典排序算法:冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、桶排序和基数排序。并给出用python实现的算法代码。 目录 一、冒泡排序 二、快速排序 三、选择排序 四、堆排序 五、插入排序 六、希尔排序 七、归并排序 八

    2024年04月15日
    浏览(41)
  • 【排序算法】归并排序与快速排序

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️ 算法训练笔记       🛰️社区 :✈️ 进步学堂       🛰️欢迎关注:👍点赞🙌收藏✍️留言 今天给大家分享两种排序,一种是

    2024年01月19日
    浏览(38)
  • 算法基础15 —— 分治算法(归并排序 + 快速排序)

    分治法的基本概念、思想 分治法是一种很重要的算法。 字面解释,分治分治,分而治之。就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 不难发现,分

    2024年02月03日
    浏览(50)
  • 排序算法1:冒泡排序、快速排序、插入排序

    排序算法:交换类排序,插入类排序、选择类排序、归并类排序 交换类排序:冒泡排序、快速排序 一、冒泡排序  时间复杂度:内层是ji,外层是从0到n-1,运行的总次数是1+2+3+4+...+n-1,即O() 空间复杂度:O(1),没有使用额外空间,不会因为n的变化而变化 如果数组本身有序,最

    2024年02月21日
    浏览(44)
  • 【排序算法(三)】交换排序(冒泡排序&&快速排序)

    ​ ​📝个人主页:@Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯 长路漫漫浩浩,万事皆有期待 上一篇博客:【排序算法(二)】选择排序(直接选择排序堆排序) 冒泡排序属于交换排序,所谓 交换排序 就是就是根据序列中两个记录

    2023年04月22日
    浏览(42)
  • 【算法】排序——选择排序和交换排序(快速排序)

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法头疼记:算法专栏  =========================

    2024年02月08日
    浏览(43)
  • 【算法系列 | 5】深入解析排序算法之——快速排序

    你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级论点 蓝色 :用来标记二级论点 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力

    2024年02月08日
    浏览(46)
  • 排序算法二 归并排序和快速排序

    目录 归并排序 快速排序 1 挖坑法​编辑 2 Hoare法 快排的优化 快排的非递归方法 七大排序算法复杂度及稳定性分析 归并排序是建立在归并操作上的一种有效的排序算法,将以有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,在使子序列段间有序.若将两个有序的

    2024年02月07日
    浏览(39)
  • 排序算法笔记-快速排序

    快速排序:确定分界数,左边小于分界,右边大于分界数,通过递归来不断重置分界数划分区域,直至完成排序 最优 n*logn 最差 n^2 原地排序,所以空间复杂度是 O(1) 细节不在阐述,自己理解一下 力扣912. 排序数组 套用模版,完美解决 力扣215 数组中的第K个最大元素 题中要求

    2024年02月16日
    浏览(45)
  • 排序算法之【快速排序】

    📙 作者简介:  清水加冰,目前大二在读,正在学习C/C++、Python、操作系统、数据库等。 📘 相关专栏: C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误还望各路大佬指正! ✨每一次努力都

    2024年02月08日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包