golang中的排序算法实现

1. 冒泡排序算法实现

package main

import "fmt"

func main() {
	values := []int{3, 98, 55, 46, 22, 3, 9, 18}
	fmt.Println(values)
	BubbleSortAsc(values)
	BubbleSortDesc(values)
}

func BubbleSortAsc(values []int) {
	for x := 0; x < len(values)-1; x++ {
		for y := x + 1; y < len(values); y++ {
			if values[x] > values[y] {
				values[y], values[x] = values[x], values[y]
			}
		}
	}
	fmt.Println(values)
}

func BubbleSortDesc(values []int) {
	for x := 0; x < len(values)-1; x++ {
		for y := x + 1; y < len(values); y++ {
			if values[x] < values[y] {
				values[y], values[x] = values[x], values[y]
			}
		}
	}
	fmt.Println(values)
}

  

2. 快速排序

 

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// 排序前
	var nums = make([]int, 0, 100)
	rand.Seed(time.Now().UnixNano())  // 随机种子
	for i := 0; i < cap(nums); i++{
		nums = append(nums, rand.Intn(100))
	}
	fmt.Println(nums)

	quickSort(nums, 0, len(nums) - 1)  // 快排

	// 排序后
	fmt.Println(nums)
}

func quickSort(nums []int, l, r int) {
	if l < r{
		mid := partition(nums , l, r)
		quickSort(nums, l, mid-1)
		quickSort(nums, mid+1, r)
	}
}

func partition(nums []int, l, r int) (mid int){
	tmp := nums[l]
	for l < r{
		for l < r && nums[r] >= tmp{  // 从右边找比tmp小的值放到左边
			r--
		}
		nums[l] = nums[r]
		for l < r && nums[l] <= tmp{  // 从左边找比tmp大的值放到右边
			l++
		}
		nums[r] = nums[l]
	}
	// 将tmp值归位
	nums[l] = tmp
	return l  // 返回l和r其实是一样的,因为他俩已经在同一个位置了
}

  

posted @ 2021-09-16 15:25  专职  阅读(29)  评论(0编辑  收藏  举报