zoukankan      html  css  js  c++  java
  • 045 常见排序算法


    更新、更全的《Go从入门到放弃》的更新网站,更有python、go、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11517502.html

    本文介绍了Go语言版经典的排序算法–快速排序、归并排序和堆排序。

    一、排序算法

    1.1 快速排序

    func quickSort(data []int) {
    	if len(data) <= 1 {
    		return
    	}
    	base := data[0]
    	l, r := 0, len(data)-1
    	for i := 1; i <= r; {
    		if data[i] > base {
    			data[i], data[r] = data[r], data[i]
    			r--
    		} else {
    			data[i], data[l] = data[l], data[i]
    			l++
    			i++
    		}
    	}
    	quickSort(data[:l])
    	quickSort(data[l+1:])
    }
    

    func main() {
    s := make([]int, 0, 16)
    for i := 0; i < 16; i++ {
    s = append(s, rand.Intn(100))
    }
    fmt.Println(s)
    quickSort(s)
    fmt.Println(s)
    }

    1.2 归并排序

    func mergeSort(data []int) []int {
    	length := len(data)
    	if length <= 1 {
    		return data
    	}
    	num := length / 2
    	left := mergeSort(data[:num])
    	right := mergeSort(data[num:])
    	return merge(left, right)
    }
    

    func merge(left, right []int) (result []int) {
    l, r := 0, 0
    for l < len(left) && r < len(right) {
    if left[l] < right[r] {
    result = append(result, left[l])
    l++
    } else {
    result = append(result, right[r])
    r++
    }
    }
    result = append(result, left[l:]...)
    result = append(result, right[r:]...)
    return
    }

    func main() {
    s := make([]int, 0, 16)
    for i := 0; i < 16; i++ {
    s = append(s, rand.Intn(100))
    }
    fmt.Println(s)
    s = mergeSort(s)
    fmt.Println(s)
    }

    1.3 堆排序

    func heapSort(array []int) {
    	m := len(array)
    	s := m / 2
    	for i := s; i > -1; i-- {
    		heap(array, i, m-1)
    	}
    	for i := m - 1; i > 0; i-- {
    		array[i], array[0] = array[0], array[i]
    		heap(array, 0, i-1)
    	}
    }
    func heap(array []int, i, end int) {
    	l := 2*i + 1
    	if l > end {
    		return
    	}
    	n := l
    	r := 2*i + 2
    	if r <= end && array[r] > array[l] {
    		n = r
    	}
    	if array[i] > array[n] {
    		return
    	}
    	array[n], array[i] = array[i], array[n]
    	heap(array, n, end)
    }
    func main() {
    	s := make([]int, 0, 16)
    	for i := 0; i < 16; i++ {
    		s = append(s, rand.Intn(100))
    	}
    	fmt.Println(s)
    	heapSort(s)
    	fmt.Println(s)
    }
    
  • 相关阅读:
    玉米不怕累,宇春最珍贵
    幸福
    谷歌位置搜索 蹩脚结合jquery.ui.gmap
    Resharp Format XML config
    正则表达取得 image src 中值
    一个Gif处理的类库
    使用nuGet管理自己的包
    正则表达式语言 快速参考
    动态加入JS及加入CSS
    检测是一个时间串或一个数字串是否连续
  • 原文地址:https://www.cnblogs.com/abdm-989/p/12004992.html
Copyright © 2011-2022 走看看