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

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

    排序算法

    快速排序

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

    归并排序

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

    堆排序

    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)
    
  • 相关阅读:
    uGUI知识点剖析之RectTransform
    C#中的结构体要使用new来实例化吗?
    LOL数值分析
    【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
    AnimationCurve
    Unity3D 自动添加Fbx Animation Event
    unity 代码添加AnimationEvent
    untiy AnimationEvent添加返回参数
    Windows CreateEvent,SetEvent,WaitForSingleObject的用法
    C++ Socket编程步骤
  • 原文地址:https://www.cnblogs.com/Golanguage/p/12285543.html
Copyright © 2011-2022 走看看