首页 > 其他分享 >Go - Merge Sort

Go - Merge Sort

时间:2023-09-17 22:44:05浏览次数:36  
标签:Sort MergeSort right Case int Merge combined Go tc

MergeSort.go

package main

func MergeSort(items []int) []int {
    n := len(items)
    var combined []int
    switch {
    case n <= 1:
        combined = items
    case n == 2:
        if items[0] <= items[1] {
            combined = items
        } else {
            combined = append(combined, items[1], items[0])
        }
    case n > 2:
        left := MergeSort(items[0 : n/2])
        right := MergeSort(items[n/2:])
        i := 0
        j := 0
        for i <= len(left) || j <= len(right) {
            switch {
            case left[i] == right[j]:
                combined = append(combined, left[i], right[j])
                i++
                j++
            case left[i] < right[j]:
                combined = append(combined, left[i])
                i++
            case left[i] > right[j]:
                combined = append(combined, right[j])
                j++
            }

            if i == len(left) {
                combined = append(combined, right[j:]...)
                break
            }
            if j == len(right) {
                combined = append(combined, left[i:]...)
                break
            }
        }
    }
    return combined
}

func main() {}

 

MergeSort_test.go

package main

import (
    "reflect"
    "testing"
)

func TestMergeSort(t *testing.T) {
    type TestCase struct {
        name     string
        input    []int
        expected []int
    }
    tests := []TestCase{
        {"Case 1", []int{31, 27, 3, 54, 6, 9, 12, 8}, []int{3, 6, 8, 9, 12, 27, 31, 54}},
        {"Case 2", []int{4, 3, 5, 3, 2, 2}, []int{2, 2, 3, 3, 4, 5}},
        {"Case 3", []int{3, 5, 8, 4, 3}, []int{3, 3, 4, 5, 8}},
        {"Case 4", []int{}, []int{}},
    }

    for _, tc := range tests {
        sorted := MergeSort(tc.input)
        if !reflect.DeepEqual(sorted, tc.expected) {
            t.Errorf("%s failed. Input: %v Output: %v Expected: %v", tc.name, tc.input, sorted, tc.expected)
        }
    }
}

 

标签:Sort,MergeSort,right,Case,int,Merge,combined,Go,tc
From: https://www.cnblogs.com/zhangzhihui/p/17710012.html

相关文章

  • Linux命令(80)之sort
    linux命令之sort1.sort介绍linux命令sort用于将文本文件内容以行为单位加以排序;sort命令默认按每行的第一个字符排序,根据首字母的ASCII码值进行升序(从小到大排列)。sort的默认分隔符是空白(空格和tab),多少空白都算一个分隔符。2.sort用法sort[参数]filesort常用参数参数说明-n......
  • go脚本示例
    以下是Go脚本的示例,涵盖了不同的主题和用途:Hello,World!packagemainimport"fmt"funcmain(){fmt.Println("Hello,World!")}打印系统时间packagemainimport("fmt""time")funcmain(){currentTime:=time.Now()......
  • natsort.natsorted()-用于自然排序(natural sorting)字符串列表。
    参考:https://natsort.readthedocs.io/en/stable/api.html#natsort.natsorted语法格式natsort.natsorted(seq:Iterable[T],key:Optional[Callable[[T],Union[natsort.utils.SupportsDunderLT,natsort.utils.SupportsDunderGT,None]]]=None,reverse:bool=False,alg:......
  • Invalid prop type check failed for prop “image“. Expected String, got Undefine
    问题描述:vue中类型不匹配导致的错误。大致的意思是期待的是“image“类型,传入的是string,所以导致出错。解决办法:类型转换 <pan-thumb :image="String(filePath)"> ......
  • golang项目搭建笔记-cobra
    cobra介绍GitHub地址cobra中,一个命令主要概念为command,arguement,flag,可以理解为谓语、宾语、状语格式为APPNAMECOMMANDARG--FLAG,例如:gitcloneURL--bare项目搭建cobra提供了非常方便的工具cobra-cli,可以快速添加命令,参考官方文档新建项目#进入项目目录gomodin......
  • Go基础语法
    1.结构packagemain//声明main包,表明当前是一个可执行程序import"fmt"//导入内置fmtfuncmain(){//main函数,是程序执行的入口fmt.Println("HelloWorld!")//在终端打印HelloWorld!}运行gorunmain.go2.变量常量数据类型packagemainimpor......
  • Mongodb/Elasticsearch数据备份/还原(随记)
    一,MongoDBv4.0.3数据备份/还原登录mongo库:mongo--port27017-u"root"-p"xxxxxxxx"--authenticationDatabase"admin"################备份##################1,mongo全库备份:mongodump-uroot-pxxxxxxxx--authenticationDatabaseadmin--op......
  • 从 MongoDb 集合中选择文档返回响应时出现不可序列化错误
    当从MongoDB集合中选择文档返回响应时出现不可序列化错误,可能是因为以下原因:数据类型不可序列化:检查文档中的数据类型是否可被序列化。某些数据类型,如日期对象或二进制数据,可能无法直接序列化为常见的数据格式(如JSON)。在这种情况下,您可能需要先对这些数据进行处理,将其转换为可序列......
  • 【GO使用redis】GO语言使用Redis基础
    之前我为大家分享了php版本的对于redis的使用,当然我也是一个go的初学者,把自己在用go的时候对接redis的时候也记录一下,为大家分享一下。下面正式开始。redis有许多go语言的客户端包,都能实现对redis的操作。例如redigo、go-redis。我们可以随意选择想要安装的我们使用的是redigo,下......
  • Spring boot data mongodb入门
    在SpringBoot中使用Mongodb,首先导入依赖库:    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-data-mongodb</artifactId>    </dependency>连接配置## 阿里云副本实......