• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go-常见排序算法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

快排

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
	}
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go加密算法:CBC对称加密(一)--DES - eilinge发布时间:2022-07-10
下一篇:
《effective Go》读后记录:GO基础发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap