Go语言数据结构之插入排序示例详解

Go语言数据结构之插入排序示例详解

什么是插入排序?

插入排序是一种简单直观的排序方法,其基本思想是将一个待排序的序列分成已排序和未排序两部分,从未排序的部分中选择一个元素插入到已排序部分的合适位置,直到所有元素都被插入到已排序部分为止。

插入排序示例

示例1

我们来看一个数字序列的插入排序示例:

package main

import "fmt"

func InsertionSort(arr []int) []int {
    var preIndex, current int
    for i := 1; i < len(arr); i++ {
        preIndex = i - 1
        current = arr[i]
        for preIndex >= 0 && arr[preIndex] > current {
            arr[preIndex+1] = arr[preIndex]
            preIndex--
        }
        arr[preIndex+1] = current
    }
    return arr
}

func main() {
    arr := []int{10, 7, 5, 3, 1, 8, 4, 9, 6, 2}
    fmt.Println(InsertionSort(arr))
}

输出结果为:

[1 2 3 4 5 6 7 8 9 10]

示例2

我们再看一个字符串序列的插入排序示例:

package main

import (
    "fmt"
    "strings"
)

func InsertionSort(arr []string) []string {
    var preIndex, current string
    for i := 1; i < len(arr); i++ {
        preIndex = arr[i-1]
        current = arr[i]
        for preIndex > current {
            arr[i] = preIndex// 插入排序之交换数据位置-内容1
            i--
            if i > 0 {
                preIndex = arr[i-1]
            } else {
                break
            }
        }
        arr[i] = current
    }
    return arr
}

func main() {
    arr := []string{"s", "o", "r", "t", "e", "x", "a", "m", "p", "l", "e"}
    fmt.Println(strings.Join(InsertionSort(arr), ""))
}

输出结果为:

aelmoprstx

插入排序的时间复杂度

插入排序的时间复杂度为$O(n^2)$。虽然时间复杂度比较高,但插入排序具有稳定性,且对于小规模的数据表现良好。另外,其内层循环虽然也是$O(n)$的,但是常数因子非常小,因此实际性能较好。

总结

插入排序是一个简单实用的排序算法,特别适用于小规模数据的排序。Go语言实现插入排序只需要几行代码就可以了,而且代码逻辑比较清晰。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go语言数据结构之插入排序示例详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 牛客小白月赛71

    A.猫猫与广告 题目: 分析: 只需考虑c * d的矩阵竖着摆和横着摆两种情况。本题提示了考虑两矩阵对应边平行的情况,实际上可以证明倘若能斜着放,那么一定可以横着放或竖着放,证明方式可已通过构造三角形来证明a* b的矩阵的长宽一定小于c * d矩阵的长宽。 code: #include <iostream> #include <cmath&…

    算法与数据结构 2023年4月25日
    00
  • Java数据结构之链表实现(单向、双向链表及链表反转)

    Java数据结构之链表实现 链表基础概念 链表是一种数据结构,它由一系列节点(Node)组成,每个节点包含两个部分,一个是数据域(data),一个是指针域(next)。数据域存储数据信息,指针域指向下一个节点。 链表的种类很多,比如单向链表、双向链表、循环链表等等。 单向链表:链表的每个节点只有一个指针域,指向下一个节点。 双向链表:链表的每个节点有两个指针…

    数据结构 2023年5月17日
    00
  • C语言实现通用数据结构之通用链表

    C语言是一门广泛应用于低级别系统编程的语言,也是数据结构和算法学习的重要工具之一,而在C语言中实现通用数据结构的方法之一就是通用链表。 通用链表是一种使用节点来组织数据的通用数据结构,每个节点包含一定量的数据以及指向链表中下一个节点的指针,因此,它可以用来实现许多不同的数据结构,例如栈、队列、树、图、哈希表等等。 具体实现通用链表的方法如下: 步骤一:定义节…

    数据结构 2023年5月17日
    00
  • C语言数据结构之栈和队列的实现及应用

    C语言数据结构之栈和队列的实现及应用 什么是栈和队列? 栈是一种具有后进先出(LIFO)特性的线性数据结构,可以理解为一个只能在一端进行插入和删除操作的数据结构。通常称插入元素的一端为栈顶,删除元素的一端为栈底。 队列是一种具有先进先出(FIFO)特性的线性数据结构,可以理解为一个只能在两端进行插入和删除操作的数据结构。一端进行插入操作,称之为队尾,一端进行…

    数据结构 2023年5月17日
    00
  • Redis数据结构之链表与字典的使用

    Redis是一个开源、基于内存的数据结构存储系统。Redis支持多种数据类型,包括字符串、整数、浮点数、列表、哈希表、集合、有序集合等。本文将详细介绍Redis数据结构之链表与字典的使用。 链表 链表是Redis中常用的数据结构之一,主要用于存储有序的元素列表。链表中的每个元素都包含了一个指向前驱元素和后继元素的指针,这种结构可以方便地实现链表的插入、删除和…

    数据结构 2023年5月17日
    00
  • C语言 数据结构链表的实例(十九种操作)

    C语言 数据结构链表的实例(十九种操作)攻略 简介 链表是一种动态数据结构,以链式存储方式让任意节点之间相互连接,链表中的每个节点包含两个部分:数据域和指针域,数据域存储节点的数据,指针域存储下一个节点的地址。链表的优点是可以动态地分配内存,其缺点是查询效率较低。 本攻略将介绍19种链表操作,其中包括创建链表、添加节点、删除节点、查找节点以及遍历链表等操作。…

    数据结构 2023年5月17日
    00
  • Halcon软件安装与界面简介

      1. 下载Halcon17版本到到本地 2. 双击安装包后 3. 步骤如下     界面分为四大块 1.    Halcon的五个助手 1)    图像采集助手:与相机连接,设定相机参数,采集图像 2)    标定助手:九点标定或是其它的标定,生成标定文件及内参外参,可以将像素单位转换为长度单位 3)    模板匹配助手:画取你想寻找的图像,设定参数,可…

    算法与数据结构 2023年4月19日
    00
  • java数据结构和算法中哈希表知识点详解

    Java数据结构和算法中哈希表知识点详解 什么是哈希表 哈希表是一种以键值对(key-value)形式存储数据的数据结构,通过使用哈希函数将对应的键映射为一个索引,使得数据的添加、删除、查找等操作可以在常数时间内完成。 具体来讲,哈希表主要包含以下几个部分: 哈希函数:将键转换为一个索引,通常使用散列算法实现。 数组:用于存储哈希表的元素(键值对)。 冲突解…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部