美文网首页
Go排序算法——插入排序与归并排序

Go排序算法——插入排序与归并排序

作者: ProgrammingGuy | 来源:发表于2020-02-11 23:57 被阅读0次
package main

import (
    "fmt"
    "math"
    "math/rand"
    "time"
)

func insertionSort(array []int) {
    length := len(array)
    for j := 1; j < length; j++ {
        key := array[j]
        i := j - 1
        for i >= 0 && array[i] > key {
            array[i+1] = array[i]
            i--
        }
        array[i+1] = key
    }
}

func randomArray(length int) (array []int) {
    array = make([]int, length)
    for i := 0; i < length; i++ {
        array[i] = rand.Intn(100000000)
    }
    return array
}

func mergeSort(array []int, p, r int) {
    if p < r {
        q := (p + r) / 2
        mergeSort(array, p, q)
        mergeSort(array, q+1, r)
        merge(array, p, q, r)
    }
}

func merge(array []int, p, q, r int) {
    length1 := q - p + 1
    length2 := r - q
    L, R := make([]int, length1+1), make([]int, length2+1)
    for i := 0; i < length1; i++ {
        L[i] = array[p+i]
    }
    for i := 0; i < length2; i++ {
        R[i] = array[q+1+i]
    }
    L[length1], R[length2] = math.MaxInt64, math.MaxInt64
    i, j := 0, 0
    for k := p; k < r+1; k++ {
        if L[i] <= R[j] {
            array[k] = L[i]
            i++
        } else {
            array[k] = R[j]
            j++
        }
    }
}

func main() {
    for i := 0; i < 5; i++ {
        arr := randomArray(100000)
        start := time.Now()
        mergeSort(arr, 0, 99999)
        duration := time.Since(start)
        fmt.Println(duration)
    }
}

用归并排序与插入排序分别进行五次数据规模为10万的数组排序,结果如下。


归并排序 插入排序

相关文章

  • 常见排序算法

    1 前言 2 排序基础2.1 选择排序2.2 插入排序 3 高级排序算法3.1 归并排序3.1.1 插入排序与归并...

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • 前端基础整理 | 算法基础

    排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序

  • 常用的排序算法

    常用的排序算法 常用的排序算法插入排序折半插入排序shell 排序冒泡排序选择排序快速排序基数排序归并排序堆排序K...

  • 排序题

    公共函数 选择排序 冒泡排序 插入排序 快速排序 归并排序——迭代算法

  • 基础排序算法

    快速排序 二分查找 冒泡排序 归并算法 选择排序 插入排序 Shell排序

  • 排序学习 - 为了面对算法面试(2)

    排序学习 - 为了面对算法面试(1) - 选择排序/冒泡排序/插入排序 4.归并排序:归并排序(MERGE-SOR...

  • 排序算法

    排序算法 1、冒泡排序: 2、插入排序 3、希尔排序 4、堆排序 5、归并排序

  • 插入排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 插入排序算法实现很简单直接,附...

  • 排序一:冒泡、插入、选择

    文章结构 概述 冒泡排序 插入排序 选择排序 1. 概述 常见的排序算法有:冒泡排序、插入排序、选择排序、归并排序...

网友评论

      本文标题:Go排序算法——插入排序与归并排序

      本文链接:https://www.haomeiwen.com/subject/itzffhtx.html