当前位置:首页 > 谈天说地

GO语言中常见的排序算法使用示例

34资源网2022-04-12605

快排

package main
import (
	"fmt"
	"math/rand"
	"time"
)
func main() {
	li:=[]int{1,3,5,2,4,6,9,7}
	left:=0
	right:=len(li)-1
	fmt.println(quick_sort(li,left,right))
}
func quick_sort(li []int, left,right int) []int {
	if left<right{
		mid := paitition(li,left,right)
		quick_sort(li,left,mid-1)
		quick_sort(li,mid+1,right)
	}
	return li
}
func paitition(li []int, left,right int) int {
	r := rand.new(rand.newsource(time.now().unixnano()))
	res := r.intn(right-left+1)+left
	li[left],li[res] = li[res],li[left]
	temp:=li[left]
	for left<right {
		for left<right && li[right]>=temp{
			right-=1
		}
		li[left]=li[right]
		for left<right && li[left]<=temp{
			left+=1
		}
		li[right]=li[left]
	}
	li[left]=temp
	return left
}

冒泡

package main
import "fmt"
func main()  {
	li:=[]int{1,3,5,2,4,6,9,7}
	fmt.println(bubble_sort(li))
}
func bubble_sort(li[]int) []int {
	for i:=0;i<len(li)-1;i++ {
		res:=true
		for j:=0;j<len(li)-1-i;j++{
			if li[j]>li[j+1]{
				li[j],li[j+1]=li[j+1],li[j]
				res=false
			}
		}
		if res{
			return li
		}
	}
	return nil
}

选择排序

package main
import "fmt"
func main()  {
	li:=[]int{1,3,5,2,4,6,9,7}
	fmt.println(select_sort(li))
}
func select_sort(li[]int) []int {
	for i:=0;i<len(li);i++ {
		min_loc := i
		for j:=i+1;j<len(li);j++ {
			if li[j]<li[min_loc] {
				min_loc=j
			}
		}
		if min_loc!=i {
			li[i],li[min_loc]=li[min_loc],li[i]
		}
	}
	return li
}

插入排序

package main
import "fmt"
func main()  {
	li:=[]int{1,3,201,5,2,100,4,6,9,7,2}
	fmt.println(insert_sort(li))
}
func insert_sort(li[]int) []int {
	for i:=1;i<len(li); i++{
		tmp:=li[i]
		j := i-1
		for j>0 && li[j]>tmp {
			li[j+1]=li[j]
			j=j-1
		}
		li[j+1] = tmp
	}
	return li
}

希尔排序

package main
import "fmt"
func main()  {
	li:=[]int{1,3,201,5,2,100,4,6,9,7,2}
	fmt.println(shell_sort(li))
}
func shell_sort(li[]int) []int {
	res := len(li)/2
	for res>0 {
		for i:=res;i<len(li);i++{
			tmp := li[i]
			j := i-res
			for j>=0 && tmp <li[j]{
				li[j+res] = li[j]
				j -= res
			}
			li[j+res] = tmp
		}
		res /=2  //res = res/2
	}
	return li
}

二分法查找

package main
import "fmt"
func main()  {
	li:=[]int{1,2,3,4,5,6,7,8}
	left:=0
	right:=len(li)-1
	value := 8
	fmt.println(bin_search(li,value,left,right))
}
func bin_search(li[]int,value,left,right int) int {
	if left <=right{
		mid := (left+right)/2
		if li[mid] == value{
			return mid
		} else if li[mid]>value {
			return bin_search(li,value,left,mid-1)
		} else {
			return bin_search(li,value,mid+1,right)
		}
	} else {
		return 999
	}
}

以上就是go语言中常见的排序算法使用示例的详细内容,更多关于go语言排序算法的资料请关注萬仟网其它相关文章!

版权声明:34楼发布

本文链接:https://www.34l.com/post/12561.html

分享给朋友:

相关文章

老话名言这10句非常金蛋,一定要牢记

老话名言这10句非常金蛋,一定要牢记

1、好狗护三邻,好汉护三村…

现在开一家vr游戏体验馆投资创业要多少钱?

现在开一家vr游戏体验馆投资创业要多少钱?

现在开一家vr游戏体验馆投资创业要多少钱?这个涉及到的东西很多,比如你的店铺开在市区还是乡下,是开在热闹地方还是比较冷清的地方,另外还要看你的店面有多大,设备有多少台,以及其他的零零碎碎加起来,就能知道开一家vr游戏体验馆需要多少钱了。…

分享30句用被刺造句的句子

分享30句用被刺造句的句子

1、黄昏已经谢去,夜幕早已铺开。高高的法国梧桐,被刺眼的白色路灯照亮。在黑色的夜空里镶了一圈又一圈攫绿,有时被拂过的夜风飘动,发出轻轻的沙沙声,只那么一阵,就消失在无限的宁静之中。…

itunes备份路径在哪里(教你查看itunes备份路径)

itunes备份路径在哪里(教你查看itunes备份路径)

用itunes备份的都知道,备份到C盘的,日积月累,C盘越来越小了,上网教程参差不齐,本教程本人亲测,因为我看到我的64G SSD空间越来越小,伤不起!!!操作步骤1、下载Junction,将Junction.exe拷贝到C:Windows…

mac地址的作用是什么(理解mac地址的作用实验报告)

mac地址的作用是什么(理解mac地址的作用实验报告)

我们上网时会发现电子设备同时有IP地址和MAC地址,为什么上网会需要两个地址呢?…

没想到,理想汽车成了“蔚小理”中最有钱的公司

没想到,理想汽车成了“蔚小理”中最有钱的公司

图源:摄图网 编者按:本文来自微信公众号连线出行(ID:lianxianchuxing),作者:周雄飞,创业邦经授权转载 曾几何时,理想汽车还是“蔚小理”三兄弟之中最落魄的一家。 理想汽车于2015年7月由李想创立,虽然与蔚来、小鹏相比起步…