{"id":20470777,"url":"https://github.com/bota5ky/ready-go","last_synced_at":"2026-04-19T11:34:29.914Z","repository":{"id":40288632,"uuid":"248122635","full_name":"Bota5ky/ready-go","owner":"Bota5ky","description":"Prepare for campus recuitment","archived":false,"fork":false,"pushed_at":"2022-12-30T01:26:19.000Z","size":74531,"stargazers_count":0,"open_issues_count":11,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-05T13:35:48.276Z","etag":null,"topics":["cpp","go"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bota5ky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-18T02:44:42.000Z","updated_at":"2023-08-06T06:19:51.000Z","dependencies_parsed_at":"2023-01-31T10:16:02.250Z","dependency_job_id":null,"html_url":"https://github.com/Bota5ky/ready-go","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Bota5ky/ready-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bota5ky%2Fready-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bota5ky%2Fready-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bota5ky%2Fready-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bota5ky%2Fready-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bota5ky","download_url":"https://codeload.github.com/Bota5ky/ready-go/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bota5ky%2Fready-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32005819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","go"],"created_at":"2024-11-15T14:14:00.759Z","updated_at":"2026-04-19T11:34:29.869Z","avatar_url":"https://github.com/Bota5ky.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ready-Go\n## 一、排序\n- 插入排序\n  - 直接插入\u0026emsp;\u0026emsp;[页内跳转](#1-InsertionSort-插入排序)\n  - Shell排序\u0026emsp;\u0026emsp;[页内跳转](#2-ShellSort-希尔排序)\n- 选择排序\n  - 直接选择\u0026emsp;\u0026emsp;[页内跳转](#3-SelectionSort-选择排序)\n  - 堆排序\u0026emsp;\u0026emsp;\u0026emsp;[页内跳转](#4-HeapSort-堆排序)\n- 交换排序\n  - 冒泡排序\u0026emsp;\u0026emsp;[页内跳转](#5-BubbleSort-冒泡排序)\n  - 快速排序\u0026emsp;\u0026emsp;[页内跳转](#6-QuickSort-快速排序)\n- 归并排序\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;[页内跳转](#7-MergeSort-归并排序)\n- 基数排序\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;[页内跳转](#8-RadixSort-基数排序)\n### Time and space complexity of various sorting algorithms\n\u003ccenter\u003e\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth rowspan=\"2\" align=\"center\"\u003e类别\u003c/th\u003e\n    \u003cth rowspan=\"2\" align=\"center\"\u003e排序方法\u003c/th\u003e\n    \u003cth colspan=\"3\" align=\"center\"\u003e时间复杂度\u003c/th\u003e\n    \u003cth align=\"center\"\u003e空间复杂度\u003c/th\u003e\n    \u003cth rowspan=\"2\" align=\"center\"\u003e稳定性\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e平均情况\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e最好情况\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e最坏情况\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e辅助存储\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd rowspan=\"2\" align=\"center\"\u003e插入排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e直接插入\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(1)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003eShell排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e1.3\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(1)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e不稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd rowspan=\"2\" align=\"center\"\u003e选择排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e直接选择\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(1)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e不稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e堆排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(1)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e不稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd rowspan=\"2\" align=\"center\"\u003e交换排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e冒泡排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(1)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e快速排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n\u003csup\u003e2\u003c/sup\u003e)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e不稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\" align=\"center\"\u003e归并排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(nlogn)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(n)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e稳定\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\" align=\"center\"\u003e基数排序\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(d(r+n))\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(d(n+rd))\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(d(r+n))\u003c/td\u003e\n    \u003ctd align=\"center\"\u003eO(rd+n)\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e稳定\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\u003c/center\u003e\n\n说明: 希尔排序根据不同的增量序列得到的复杂度分析也不同，这里取N//2。\n### 1. InsertionSort 插入排序\n```golang\n// InsertionSort 插入排序 稳定\n// 时间复杂度：平均 O(n^2) 最好 O(n) 最坏 O(n^2) \n// 空间复杂度：O(1)\nfunc InsertionSort(nums []int) {\n\tfor i := 1; i \u003c len(nums); i++ {\n\t\ttemp := nums[i] /* 取出未排序序列中的第1个元素*/\n\t\tvar j int\n\t\tfor j = i; j \u003e 0 \u0026\u0026 nums[j-1] \u003e temp; j-- {\n\t\t\tnums[j] = nums[j-1] /*依次与已排序序列中元素比较并右移*/\n\t\t}\n\t\tnums[j] = temp /* 放进合适的位置 */\n\t}\n}\n```\n### 2. ShellSort 希尔排序\n```golang\n// ShellSort 希尔排序 不稳定\n// 时间复杂度：平均 O(n^1.3) 最好 O(n) 最坏 O(n^2) \n// 空间复杂度：O(1)\nfunc ShellSort(nums []int) {\n\tfor k := len(nums) / 2; k \u003e 0; k /= 2 {\n\t\tfor i := k; i \u003c len(nums); i++ {\n\t\t\ttemp := nums[i] /* 取出未排序序列中的第k个元素*/\n\t\t\tvar j int\n\t\t\tfor j = i; j \u003e= k \u0026\u0026 nums[j-k] \u003e temp; j -= k { /* 注意界限 j \u003e= k */\n\t\t\t\tnums[j] = nums[j-k] /*依次与已排序序列中元素比较并右移*/\n\t\t\t}\n\t\t\tnums[j] = temp /* 放进合适的位置 */\n\t\t}\n\t}\n}\n```\n### 3. SelectionSort 选择排序\n```golang\n// SelectionSort 直接选择排序 不稳定\n// 时间复杂度：平均 O(n^2) 最好 O(n^2) 最坏 O(n^2) \n// 空间复杂度：O(1)\nfunc SelectionSort(nums []int) {\n\tfor i := 0; i \u003c len(nums)-1; i++ {\n\t\tmin := i\n\t\tfor j := i + 1; j \u003c len(nums); j++ {\n\t\t\tif nums[j] \u003c nums[min] {\n\t\t\t\tmin = j\n\t\t\t}\n\t\t}\n\t\tnums[min], nums[i] = nums[i], nums[min]\n\t}\n}\n```\n### 4. HeapSort 堆排序\n```golang\n// HeapSort 堆排序 不稳定\n// 时间复杂度：平均 O(nlogn) 最好 O(nlogn) 最坏 O(nlogn)\n// 空间复杂度：O(1)\nfunc HeapSort(nums []int) {\n\tfor i := len(nums); i \u003e 0; i-- {\n\t\theapify(nums[:i])\n\t\tnums[0], nums[i-1] = nums[i-1], nums[0]\n\t}\n}\n\nfunc heapify(nums []int) {\n\tlast := len(nums)/2 - 1 //最后一个非叶子节点\n\tfor i := last; i \u003e= 0; i-- {\n\t\tmax := i\n\t\tleft := 2*i + 1\n\t\tright := 2*i + 2\n\t\tif left \u003c len(nums) \u0026\u0026 nums[left] \u003e nums[max] {\n\t\t\tmax = left\n\t\t}\n\t\tif right \u003c len(nums) \u0026\u0026 nums[right] \u003e nums[max] {\n\t\t\tmax = right\n\t\t}\n\t\tnums[max], nums[i] = nums[i], nums[max]\n\t}\n}\n```\n### 5. BubbleSort 冒泡排序\n```golang\n// BubbleSort 冒泡排序 稳定\n// 时间复杂度：平均 O(n^2) 最好 O(n) 最坏 O(n^2) \n// 空间复杂度：O(1)\nfunc BubbleSort(nums []int) {\n\tfor i := len(nums) - 1; i \u003e 0; i-- {\n\t\tfor j := 0; j \u003c i; j++ {\n\t\t\tif nums[j] \u003e nums[j+1] {\n\t\t\t\tnums[j], nums[j+1] = nums[j+1], nums[j]\n\t\t\t}\n\t\t}\n\t}\n}\n```\n### 6. QuickSort 快速排序\n```golang\n// QuickSort 快速排序 不稳定\n// 时间复杂度：平均 O(nlogn) 最好 O(nlogn) 最坏 O(n^2) \n// 空间复杂度：O(nlogn)\nfunc QuickSort(nums []int) {\n\tif len(nums) \u003c 2 {\n\t\treturn\n\t}\n\tpivot := nums[0]\n\ti, j := 0, len(nums)-1\n\tfor i \u003c j {\n\t\t//基准pivot设置为最左边，就从最右边开始\n\t\tfor ; i \u003c j \u0026\u0026 nums[j] \u003e= pivot; j-- {\n\t\t}\n\t\tnums[i] = nums[j]\n\t\tfor ; i \u003c j \u0026\u0026 nums[i] \u003c= pivot; i++ {\n\t\t}\n\t\tnums[j] = nums[i]\n\t}\n\tnums[i] = pivot\n\tQuickSort(nums[:i])\n\tQuickSort(nums[i+1:])\n}\n```\n### 7. MergeSort 归并排序\n```golang\n// MergeSort 归并排序 稳定\n// 时间复杂度：平均 O(nlogn) 最好 O(nlogn) 最坏 O(nlogn)\n// 空间复杂度：O(n)\nfunc MergeSort(nums []int) {\n\ttemp := make([]int, len(nums))\n\tmerge(nums, temp, 0, len(nums)-1)\n}\n\nfunc merge(nums, temp []int, l, r int) {\n\tif l \u003e= r {\n\t\treturn\n\t}\n\tmid := (l + r) / 2\n\tmerge(nums, temp, l, mid)\n\tmerge(nums, temp, mid+1, r)\n\ti, j := l, mid+1 //  l \u003c= i \u003c=mid     mid \u003c j \u003c=r\n\tfor k := l; k \u003c= r; k++ {\n\t\ttemp[k] = nums[k]\n\t}\n\tfor k := l; k \u003c= r; k++ {\n\t\tif i \u003e mid || j \u003c= r \u0026\u0026 temp[j] \u003c temp[i] {\n\t\t\tnums[k] = temp[j]\n\t\t\tj++\n\t\t} else {\n\t\t\tnums[k] = temp[i]\n\t\t\ti++\n\t\t}\n\t}\n}\n```\n### 8. RadixSort 基数排序\n```golang\n// RadixSort 基数排序 稳定 r代表基数 d代表长度\n// 时间复杂度：平均 O(d(r+n)) 最好 O(d(n+rd)) 最坏 O(d(r+n))\n// 空间复杂度：O(rd+n)\nfunc RadixSort(nums []int) {\n\tMSD(nums)\n}\n\n//LSD Least Significant Digit 次位优先 \t/* BucketSort */\nfunc LSD(nums []int) {\n\tbucket := make([][]int, 10) // 0 ~ 9 尾数\n\tval := 1\n\tfor len(bucket[0]) \u003c len(nums) {\n\t\tbucket = make([][]int, 10)\n\t\tfor _, v := range nums {\n\t\t\tlast := (v / val) % 10\n\t\t\tbucket[last] = append(bucket[last], v)\n\t\t}\n\t\tval *= 10\n\t\tfor i, k := 0, 0; i \u003c 10; i++ {\n\t\t\tfor j := 0; j \u003c len(bucket[i]); j++ {\n\t\t\t\tnums[k] = bucket[i][j]\n\t\t\t\tk++\n\t\t\t}\n\t\t}\n\t}\n}\n\n//MSD Most Significant Digit 主位优先\nfunc MSD(nums []int) {\n\t//先按其主位排好序 --\u003e 然后对每一个主位桶再进行内部的次位优先基数排序 --\u003e 最后统一收集\n}\n```\n## 二、二叉树的迭代遍历\n- [前序](https://github.com/Bota5ky/leetcode/blob/master/144.go)\n- [中序](https://github.com/Bota5ky/leetcode/blob/master/94.go)\n- [后序](https://github.com/Bota5ky/leetcode/blob/master/145.go)\n- 模板\n```golang\nfor cur!=nil || len(stack)\u003e0 {\n        if cur!=nil {\n            ...\n        }else{\n            ...\n        }\n    }\n```\n## 三、位运算\n1. 绝对值的位运算，以int32为例：`(var ^ (var \u003e\u003e 31)) - (var \u003e\u003e 31)`。\n2. 交换两个数字：`a = a^b` `b = a^b` `a = a^b`\n3. 最右边的1变为0：`n \u0026= (n - 1)`\n## 字符串\n- 常用的字符串拼接方法：`+`,`fmt.Sprintf()`,`strings.Join()`,以下还有2种\n```golang\ns1 := \"字符串\"\ns2 := \"拼接\"\n//定义Buffer类型\nvar bt bytes.Buffer\n//向bt中写入字符串\nbt.WriteString(s1)\nbt.WriteString(s2)\n//获得拼接后的字符串\ns3 := bt.String()\n```\n```golang\ns1 := \"字符串\"\ns2 := \"拼接\"\nvar build strings.Builder\nbuild.WriteString(s1)\nbuild.WriteString(s2)\ns3 := build.String()\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbota5ky%2Fready-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbota5ky%2Fready-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbota5ky%2Fready-go/lists"}