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份把多的 ...
随机推荐
- MySQLi面向对象实践--select
对于update.insert.delete请参考http://www.cnblogs.com/-beyond/p/8457580.html 执行select,如果SQL语句执行成功,那么返回的是一个 ...
- git查看分支图
git log --graph --decorate --oneline --simplify-by-decoration --all
- [日常工作]WorkStation 使用端口转发的方式使用宿主机IP地址提供服务
1. 虚拟机内的地址如果经常变化,或者是想使用宿主机进行网络服务 但是又不想有人能够访问具体的服务器提供机器.. 可以使用宿主机转发虚拟机的端口的方式来进行处理. workstation 比较好实现 ...
- Bootstrap面板
前面的话 面板(Panels)是Bootstrap框架新增的一个组件,某些时候可能需要将某些 DOM 内容放到一个盒子里.对于这种情况,可以使用面板组件.本文将详细介绍Bootstrap面板 基础面板 ...
- [Caffe]:关于*** Aborted at 1479432790 (unix time) try "date -d @1479432790" 错误的另一种原因
问题:设置solver.prototxt时,lr_policy:"step",运行时出现下面问题 *** Aborted at (unix time) try "date ...
- Google社交梦之隐私问题
导读 2011年6月底,Google+ 作为Facebook最有力狙击者的身份诞生,同时以隐私功能作为两者主要区分点:2018年10月,Google+被曝发生重大隐私泄露问题,消费版本被宣布仅剩10个 ...
- php-扩展模块查找下载网址
http://pecl.php.net/ 在该网页里面输入想要查找的扩展模块名 如: 搜索结果:
- BZOJ2212 POI2011Tree Rotations(线段树合并)
显然子树内的操作不会对子树外产生影响.于是贪心,若交换之后子树内逆序对减少就交换. 这个东西可以用权值线段树计算.操作完毕后需要对两棵权值线段树合并,这个的复杂度是两棵线段树的重复节点个数.那么总复杂 ...
- js md5 中文
最近手机端通过js对请求数据加密,发现针对中文加密的结果和asp.net的webapi加密结果不一致 网上搜索了一下,发现以下js可用 function md5(string) { var x = A ...
- Java生成数独函数
突然想写一下生成算法.代码注释的比较多,应该比较好理解 使用了递归 import java.util.ArrayList; public class Sudoku { static int sudok ...