• 常见排序算法



    更新、更全的《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)
    }
    
  • 相关阅读:
    ACM 一种排序
    ACM Binary String Matching
    ACM 括号配对问题
    ACM BUYING FEED
    ACM 喷水装置(二)
    ACM 会场安排问题
    ACM 推桌子
    ACM 心急的C小加
    ACM 田忌赛马
    ACM 疯牛
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11517466.html
Copyright © 2020-2023  润新知