zoukankan      html  css  js  c++  java
  • 排序算法——归并排序

    1、算法介绍

     归并排序采用分而治之的思想进行排序,需要额外的内存空间。

    (1)申请arrRes与未排序序列arr相同内存空间,用于存放归并后的序列

    (2)将未排序序列分为两份arrL与arrR,从arrL与arrR分别取出一个元素进行比较,较小的并入arrRes序列,

    从并入元素所属的序列取下一个进行比较,直至序列arrL与arrR一方全部并入arrRes,将剩余的一方直接并入arrRes

    (3)递归步骤(2),递归结束,归并完成

    2、代码实现

    2.1、golang

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	slice := []int{5, 3, 12, 54, 23, 12, 6, 9, 19}
    	slice = SortMerge(slice)
    	fmt.Println(slice)
    }
    
    //归并排序
    func SortMerge(slice []int) []int {
    	n := len(slice)
    	if n < 2 {
    		return slice
    	}
    	middle := n / 2
    	left := slice[:middle]
    	right := slice[middle:]
    	return merge(SortMerge(left), SortMerge(right))
    }
    
    //归并元素
    func merge(left, right []int) []int {
    	var result []int
    	for len(left) != 0 && len(right) != 0 {
    		if left[0] <= right[0] {
    			result = append(result, left[0])
    			left = left[1:]
    		} else {
    			result = append(result, right[0])
    			right = right[1:]
    		}
    	}
    	result = append(result, left...)
    	result = append(result, right...)
    	return result
    }
    

    2.2、python3

    # 归并排序
    def sort_merge(arr):
        n = len(arr)
        if n < 2:
            return arr
        middle = n // 2
        left, right = arr[0:middle], arr[middle:]
        return __merge(sort_merge(left), sort_merge(right))
    
    
    # 左右归并
    def __merge(left, right):
        result = []
        while left and right:
            if left[0] <= right[0]:
                result.append(left.pop(0))
            else:
                result.append(right.pop(0))
        return result + left + right
    
    
    if __name__ == '__main__':
        arr = [5, 3, 12, 54, 23, 12, 6, 9, 19]
        arr = sort_merge(arr)
        print(arr)
    
    笃志:“博学而笃志,切问而近思,仁在其中矣。”
    弘毅:“士不可以不弘毅,任重而道远。”
    止于至善:“大学之道,在明明德,在亲民,在止于至善。”
    关注:笃志弘毅,止于至善
  • 相关阅读:
    获取一个日期月的所有日期
    elementUI 日期 周一、周二、周三、周四、周五、周六、周日快捷键
    两个日期之间的天数集合
    数组去重并排序
    日历封装
    <转载> VUE项目中CSS管理
    【转载】Vue项目自动转换 px 为 rem,高保真还原设计图
    HTML5新标签
    pChart图表插件使用
    JavaScript ajax请求
  • 原文地址:https://www.cnblogs.com/dzhy/p/10943535.html
Copyright © 2011-2022 走看看