golang数组排序算法
冒泡排序
图 https://www.cnblogs.com/onepixel/articles/7674659.html

package main import (
"fmt"
) func bubbleSort(slice []int) []int {
for n := 0; n <= len(slice); n++ {
for i := 1; i < len(slice)-n; i++ {
if slice[i] < slice[i-1] {
slice[i], slice[i-1] = slice[i-1], slice[i]
}
}
}
return slice
} func main() { var arr = [...]int{99, 51, 41, 2, 31} var rarr = bubble(arr[:])
fmt.Println(rarr)
}
比较排序

package main import (
"fmt"
) func selectionSort(slice []int) []int {
for n := 0; n <= len(slice); n++ {
fmt.Println(slice)
fmt.Println("#####################")
for i := n + 1; i < len(slice); i++ { if slice[n] > slice[i] {
slice[n], slice[i] = slice[i], slice[n]
fmt.Println(slice)
}
}
fmt.Println("---------------")
}
return slice
} func main() { var arr = [...]int{99, 51, 41, 2, 31} var rarr = selectionSort(arr[:])
fmt.Println(rarr)
}

插入排序
思路:将数组拆分为一个有序的,一个无序的。初始时下标0永远为有序数组。
建立循环,从下标1开始到数组的长度,每个都与前一个进行对比,如果比前一个值小,就互相换位,当当前值比上一个值大时,说明当前值之前都是已经排序好的数组。就退出。
例子:如该数组[...]int{10, 56, 4, 654, 8, 997},
第一次循环时,n=1 i=1 56 > 10跳出。
第二次循环时,{10, 56, 4, 654, 8, 997} n=2 i=n=2, 4<56互换,值为{10, 4, 56, 654, 8, 997},内部循环继续进行,i=1 4<10互换为[4 10 56 654 8 997]。内部循环结束,条件为i<0

package main import (
"fmt"
) func insertSort(arr []int) {
for n := 1; n < len(arr); n++ {
for i := n; i > 0; i-- {
if arr[i] > arr[i-1] {
break
}
arr[i], arr[i-1] = arr[i-1], arr[i]
fmt.Println(arr)
}
}
} func main() {
var array = [...]int{10, 56, 4, 654, 8, 997}
insertSort(array[:]) fmt.Println(array)
}

快速排序

思路:以一个基准数将数组拆分为两个,一边大于这个数,一边小于这个数。从数组第0个开始,首先先记录此基准数的下标和值 {312, 84, 543, 5, 100, 23} ,k=0 v=312。需要传入一个从哪里开始到哪里的位置。这里基准数为第一个,顾循环位置就从0+1开始 循环完之后为 84 84 543 5 100 23
package main import (
"fmt"
) func qsort(arr []int, start int, end int) {
if start >= end {
return
} key := start
value := arr[start] //记录当前基准值位置
fmt.Println(arr)
for n := start + 1; n <= end; n++ {
// a[n] < arr[start]
if arr[n] < value {
arr[key] = arr[n] //就将a[n]挪至arr[key]所在位置
arr[n] = arr[key+1] //a[n]空缺了,将arr[key]向后移动一位
// 理论上现在值为这个 {84, 84, 543, 5, 100, 23}
key++ //key的位置改变了1位,key++
//最后在将进位后的arr[key] = 之前保存的value即为
// value=321 {84, 312, 543, 5, 100, 23}
//这样完成了替换
}
} arr[key] = value
fmt.Println("---------------------------")
//一轮循环后该数组为[84 5 100 23 312 543]
//将基准数两边的数进行进行排序 此时 key=3 start=0 左边为 start-key-1
qsort(arr, start, key-1)
qsort(arr, key+1, end) //右边为key+1-end
} func main() {
var array = [...]int{312, 84, 543, 5, 100, 23}
qsort(array[:], 0, len(array)-1)
fmt.Println(array)
}

golang数组排序算法的更多相关文章
- js中常见的数组排序算法-冒泡排序和选择排序
reverse( ) 数组逆序 // reverse() 数组逆序 var arr = ["边境牧羊犬", "德国牧羊犬", "金毛" ...
- Java常用的数组排序算法(面试宝典)
这段时间有些忙,今天空闲出来给大家分享下Java中常用的数组排序算,有冒泡排序.快速排序.选择排序.插入排序.希尔算法.并归排序算法.堆排序算法,以上排序算法中,前面几种相对后面的比较容易理解一些.下 ...
- javascript数组排序算法之选择排序
前言 作为一名程序员数组的排序算法是必须要掌握的,今天来图解----选择排序 选择排序原理 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大) ...
- golang广度优先算法-走迷宫
广度优先遍历,走迷宫思路: 1.创建二维数组,0表示是路,1表示是墙:创建队列Q,存储可遍历的点,Q的第一个元素为起始点 2.从队列中取一个点,开始,按上.左.下.右的顺序遍历周围的点next,nex ...
- 一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)
#include <stdlib.h> #include <string.h> #include "sort.h" //冒泡排序 int bubbleSor ...
- 【golang必备算法】 Letecode 146. LRU 缓存机制
力扣链接:146. LRU 缓存机制 思路:哈希表 + 双向链表 为什么必须要用双向链表? 因为我们需要删除操作.删除一个节点不光要得到该节点本身的指针,也需要操作其前驱节点的指针,而双向链表才能支持 ...
- 2022-7-15 pan小堂 数组排序算法
二分查找(理解) public ych class{ public static void main(String[] args){ ///运用二分查找需要 数组在的值是递升的 int[] arr1 ...
- 图解Golang的GC算法
虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了. 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mar ...
- php 经典的算法题你懂的
有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...
随机推荐
- Visual Studio 2017 激活密钥 [复制记录]
Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Visual Studio 2017(VS201 ...
- spss入门
spss下载地址:http://www.ddooo.com/softdown/53379.htm
- codeforces620A
Professor GukiZ's Robot CodeForces - 620A 机器人很好玩 一开始在(x1,y1) 最后在(x2,y2) 每秒钟内横坐标最多变化1(也可以不变化)纵坐标也是 问最 ...
- unorder_map 自定义KEY
1. boost::unorder_map 实现自定义KEY // boostLibTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- BZOJ2002[Hnoi2010]弹飞绵羊——LCT
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- BZOJ5300 [Cqoi2018]九连环 【数学】【FFT】
题目分析: 这道题是数学必修五的原题,做法如下图,书上讲得很详细了. 那么这道题目用快速幂就可以解决了,值得注意的是,分析时间复杂度会发现直接做乘法其实是O(n^2)的,但是有一个1/20左右的常数, ...
- Codeforces Round #431 (Div. 2) B. Tell Your World
B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- AGC 016 F - Games on DAG(状压dp)
题意 给你一个有 \(n\) 个点 \(m\) 条边 DAG 图,点的标号和拓扑序一致. 现在有两个人进行博弈,有两个棋子分别在 \(1, 2\) 号点上,需要不断移动到它指向的点上. 如果当前两个点 ...
- [算法进阶0x10]基本数据结构A作业总结
在线题目\(oj\)评测地址:https://xoj.red/contests/show/1237 T1-Editor(hdu4699) 题目描述 维护一个整数序列的编辑器,有以下5种操作,操作总数不 ...
- Prometheus-operator架构详解
Prometheus是一个开源的系统监视和警报工具.一款非常优秀的监控工具.监控方案:Prometheus 提供了数据搜集.存储.处理.可视化和告警一套完整的解决方案. Prometheus的关键特性 ...