
1. 冒泡排序 (BubbleSort)
| func TestBubbleTest(t *testing.T) { |
| arr := []int{2, 3, 5, 1, 5, 7, 4} |
| bubbleSort(arr) |
| for i := 0; i < len(arr); i++ { |
| fmt.Print(arr[i]) |
| } |
| } |
| |
| func bubbleSort(arr []int) { |
| if arr == nil || len(arr) < 2 { |
| return |
| } |
| for i := len(arr); i > 0; i-- { |
| for j := 0; j < i-1; j++ { |
| if arr[j+1] < arr[j] { |
| Swap(arr, j+1, j) |
| } |
| } |
| } |
| } |
| |
2. 插入排序 (Insertion Sort)
| func TestInsertSort(t *testing.T) { |
| arr := []int{2, 3, 5, 1, 5, 7, 4} |
| insetSort2(arr) |
| for i := 0; i < len(arr); i++ { |
| fmt.Printf("%d", arr[i]) |
| } |
| } |
| func insetSort2(arr []int) { |
| if len(arr) < 2 || arr == nil { |
| return |
| } |
| for i := 1; i < len(arr); i++ { |
| for j := i - 1; j >= 0 && arr[j] > arr[j+1]; j-- { |
| Swap(arr, j, j+1) |
| } |
| } |
| } |
| |
| func Swap(arr []int, pre int, cur int) { |
| tem := arr[pre] |
| arr[pre] = arr[cur] |
| arr[cur] = tem |
| } |
| |
3. 选择排序 (SelctionSort)
| func TestSelectSort(t *testing.T) { |
| arr := []int{2, 3, 5, 1, 5, 7, 4} |
| selectionSort(arr) |
| fmt.Println(arr) |
| |
| } |
| |
| func selectionSort(arr []int) { |
| if arr ==nil && len(arr)<2{ |
| return |
| } |
| for i := 0; i < len(arr); i++ { |
| for j := i+1; j < len(arr); j++ { |
| if arr[i]>arr[j] { |
| Swap(arr,i ,j) |
| } |
| } |
| } |
| } |
| |
4. 归并排序 (Merge Sort)
| func TestMergeSort(t *testing.T) { |
| arr := []int{5, 4, 3, 2, 1} |
| mergeSort(arr) |
| |
| } |
| |
| func mergeSort(arr []int) { |
| if arr == nil || len(arr) < 2 { |
| return |
| } |
| prosess(arr, 0, len(arr)-1) |
| fmt.Println(arr) |
| } |
| |
| func prosess(arr []int, l int, r int) { |
| if l == r { |
| return |
| } |
| m := l + ((r - l) >> 1) |
| prosess(arr, l, m) |
| prosess(arr, m+1, r) |
| merge(arr, l, m, r) |
| } |
| |
| func merge(arr []int, l int, m int, r int) { |
| help := make([]int, r - l + 1) |
| i := 0 |
| p := l |
| p2 := m + 1 |
| for p <= m && p2 <= r { |
| if arr[p]<=arr[p2] { |
| help[i]=arr[p] |
| p++ |
| }else { |
| help[i]=arr[p2] |
| p2++ |
| } |
| i++ |
| } |
| for p<=m { |
| help[i]=arr[p] |
| i++ |
| p++ |
| } |
| |
| for p2<=r { |
| help[i]=arr[p2] |
| i++ |
| p2++ |
| } |
| for i := 0; i < len(help); i++ { |
| arr[l + i]=help[i] |
| } |
| } |
5. 快速排序 (Quicksort)
| import ( |
| "fmt" |
| "testing" |
| ) |
| |
| func TestFastSort(t *testing.T) { |
| arr := []int{2, 3, 5, 1, 5, 7, 4} |
| fastSort(arr) |
| fmt.Println(arr) |
| } |
| |
| func fastSort(arr []int) { |
| if arr==nil|| len(arr)<2 { |
| return |
| } |
| prosess2(arr,0,len(arr)-1) |
| } |
| |
| func prosess2(arr []int, L int, R int) { |
| if L>R { |
| return |
| } |
| M:=partitition(arr,L,R) |
| prosess2(arr,L,M-1) |
| prosess2(arr,M+1,R) |
| } |
| |
| func partitition(arr []int, L int, R int) int { |
| if L>R{ |
| return -1 |
| } |
| if L==R { |
| return L |
| } |
| lessEquals:=L-1 |
| index:=L |
| for index<R{ |
| if arr[index]<=arr[R] { |
| lessEquals++ |
| Swap(arr,lessEquals,index) |
| } |
| index++ |
| } |
| lessEquals++ |
| Swap(arr,lessEquals,R) |
| return lessEquals; |
| } |
| |
| |
6. 基数排序 (RadixSort) == 按照数字位数
7. 堆排序 (HeapSort) ==大根堆,一直压栈出栈
8. 希尔排序(Shell Sort)==递归+插入
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
· 全程使用 AI 从 0 到 1 写了个小工具