首页 > 编程语言 > 详细

Go 语言实现基本排序

时间:2021-06-04 11:51:53      阅读:16      评论:0      收藏:0      [点我收藏+]

冒泡排序

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

插入排序

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
}

选择排序

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

归并排序

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)
}
// 21
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 {
		// 543 210
		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]
	}
}

快速排序

基数排序

Go 语言实现基本排序

原文:https://www.cnblogs.com/rainbowbridge/p/14848627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!