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日

相关文章

  • Java面试题冲刺第十三天–数据库(3)

    当我们准备面试数据库相关的职位时,需要掌握SQL语言和常见的数据库管理系统。下面是针对Java面试中可能出现的常见数据库面试题的一些攻略。 1. 数据库连接的常见方式 在Java中,要与数据库连接有两种方式:JDBC和ORM框架。 (1) JDBC JDBC是Java连接数据库的标准方式,使用JDBC可以通过Java程序来连接不同的数据库。连接数据库的步骤包…

    数据结构 2023年5月17日
    00
  • python算法与数据结构朋友圈与水杯实验题分析实例

    让我来详细讲解一下“python算法与数据结构朋友圈与水杯实验题分析实例”的完整攻略。 1. 前言 本文将分享两个Python的算法与数据结构问题,即朋友圈和水杯实验题。我们将分别介绍问题的背景、解题思路和代码实现。 2. 朋友圈问题 2.1 背景 给定一个M*N的矩阵,矩阵中的每个元素都是1或0。如果矩阵中的1元素相邻,即水平、垂直或对角线相邻,则将这些元…

    数据结构 2023年5月17日
    00
  • Mysql 数据库结构及索引类型

    好的。首先,我们需要了解 Mysql 数据库的基本结构和索引类型。 Mysql 数据库结构 Mysql 数据库包含多个数据库,每个数据库包含多个数据表,每个数据表包含多个数据记录(或者叫行)。关键的概念包括数据库、数据表、数据记录以及 Mysql 列类型等。 数据库 Mysql 数据库是一个命名的容器,用于存储和管理相关数据表。可以使用以下 SQL 代码来创…

    数据结构 2023年5月17日
    00
  • Java数据结构之堆(优先队列)详解

    Java数据结构之堆(优先队列)详解 概述 堆是一种基于树的数据结构,它可以用来解决很多问题,例如排序、优先队列等。在堆中,每个节点的值都小于或等于它的子节点的值。堆分为两种类型:最大堆和最小堆。在最大堆中,根节点的值最大;而在最小堆中,根节点的值最小。 堆的操作主要有以下两种: 插入:将一个元素插入到堆中,需要维护堆的性质,即节点的值小于或等于子节点的值。…

    数据结构 2023年5月17日
    00
  • MySQL索引背后的数据结构及算法原理详解

    《MySQL索引背后的数据结构及算法原理详解》是一篇介绍MySQL索引背后的数据结构和算法原理的文章。MySQL索引是提高查询效率的一个重要工具,理解其背后的数据结构和算法原理对于提高数据库性能和优化查询操作是非常有帮助的。 本文主要分为以下三部分: MySQL索引背后的数据结构 索引的几种常见数据结构及其优缺点 索引的算法原理 MySQL索引背后的数据结构…

    数据结构 2023年5月17日
    00
  • Python数据结构之二叉排序树的定义、查找、插入、构造、删除

    Python数据结构之二叉排序树 一、定义 二叉排序树(Binary Search Tree,BST),也称为二叉查找树或二叉搜索树,是一种基于二叉树的数据结构,其中每个节点都包含一个键值,且满足: 左子树中所有节点的键值均小于当前节点; 右子树中所有节点的键值均大于当前节点; 这是一种自平衡的数据结构,可以快速地进行查找、插入、删除等操作。 二、查找 查找…

    数据结构 2023年5月17日
    00
  • 字符串算法–$\mathcal{KMP,Trie}$树

    \(\mathcal{KMP算法}\) 实际上,完全没必要从\(S\)的每一个字符开始,暴力穷举每一种情况,\(Knuth、Morris\)和\(Pratt\)对该算法进行了改进,称为 \(KMP\) 算法。 而\(KMP\)的精髓在于,对于每次失配之后,我都不会从头重新开始枚举,而是根据我已经得知的数据,从某个特定的位置开始匹配;而对于模式串的每一位,都有…

    算法与数据结构 2023年4月18日
    00
  • C语言数据结构顺序表中的增删改(尾插尾删)教程示例详解

    C语言数据结构顺序表中的增删改(尾插尾删)教程示例详解 什么是顺序表 顺序表是一种线性表,它通过一块连续的存储空间来存储数据。顺序表中的数据元素排列在物理存储空间上也是连续的,每个元素占用一个固定的位置和大小,并且使用下标来访问。 顺序表的定义 下面是以int类型为例的一个简单顺序表的定义: #define SIZE 50 typedef struct { …

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