go练习排序算法

package main

import (
	"fmt"
	"math/rand"
)

func BubbleSort(arr []int) {
    
    
	for i := 0; i < len(arr); i++ {
    
    
		flag := false
		for j := 0; j < len(arr)-i-1; j++ {
    
    
			if arr[j] > arr[j+1] {
    
    
				arr[j], arr[j+1] = arr[j+1], arr[j]
				flag = true
			}
		}
		if flag == true {
    
    
			break
		}
	}
}
func insertSort(arr []int) {
    
    
	for i := 1; i < len(arr); i++ {
    
    
		for j := i; j > 0; j-- {
    
    
			if arr[j] < arr[j-1] {
    
    
				arr[j], arr[j-1] = arr[j-1], arr[j]
			}
		}
	}
}
func getIndex(left, right int, arr []int) int {
    
    
	tmp := arr[left]
	for left < right {
    
    
		for left < right && arr[right] > tmp {
    
    
			right--
		}
		arr[left], arr[right] = arr[right], arr[left]
		for left < right && arr[left] <= tmp {
    
    
			left++
		}
		arr[left], arr[right] = arr[right], arr[left]
	}
	arr[left] = tmp
	return left
}
func QuickSort(left, right int, arr []int) {
    
    
	if left < right {
    
    
		index := getIndex(left, right, arr)
		QuickSort(left, index-1, arr)
		QuickSort(index+1, right, arr)
	}
}
func mergeTwoSlice(left, mid, right int, arr []int) {
    
    
	i, j, k := left, mid+1, left
	tmp := make([]int, right-left+1, len(arr))
	copy(tmp, arr[left:left-right+1])
	for i <= mid && j <= right {
    
    
		if tmp[i-left] < tmp[j-left] {
    
    
			arr[k] = tmp[i-left]
			k++
			i++
		} else {
    
    
			arr[k] = tmp[j-left]
			k++
			j++
		}
	}
	for i <= mid {
    
    
		arr[k] = tmp[i-left]
		k++
		i++
	}
	for j <= right {
    
    
		arr[k] = tmp[j-left]
		k++
		j++
	}
}
func mergeSort(left, right int, arr []int) {
    
    
	if left < right {
    
    
		mid := (left + right) / 2
		mergeSort(left, mid, arr)
		mergeSort(mid+1, right, arr)
		mergeTwoSlice(left, mid, right, arr)
	}
}

func test() {
    
    
	arr := []int{
    
    9, 8, 21, 2, 1}
	// make 可以用于创建一个slice make([]int, n , len) 长度为 n ,cap为 len
	s1 := make([]int, 1, 10)
	// copy 是需要根据dest的大小(len而非cap大小)来进行复制
	copy(s1, arr[3:5])
	fmt.Println(len(s1), cap(s1), s1, s1)

}
func main() {
    
    
	rand.Seed(999)
	var arr []int
	for i := 0; i < 10; i++ {
    
    
		arr = append(arr, rand.Intn(100))
	}
	fmt.Println(arr)
	//BubbleSort(arr)
	//insertSort(arr)
	//QuickSort(0, len(arr)-1, arr)
	//mergeSort(0, 9, arr)
	test()
	fmt.Println(arr)

}

猜你喜欢

转载自blog.csdn.net/qq_44741914/article/details/132282758