Go语言实现常用排序算法的示例代码

本文将详细介绍如何使用Go语言实现常用排序算法的示例代码。主要内容包括:

  1. 排序算法介绍
  2. 排序算法示例代码
  3. 算法测试

排序算法介绍

排序算法是计算机科学基本的算法,其目的是将一组数据按照特定的规则进行排序。常用的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序等。以下是每种算法的简单介绍:

  • 冒泡排序:重复比较相邻的两个元素,将较大的元素向后移动,最终将最大的元素移到最后。
  • 选择排序:每次选择一个最小值,放在已排序好的末尾。
  • 插入排序:将一个元素插入到已排序好的序列中,使插入后的序列仍保持有序。
  • 归并排序:采用分而治之的思想,将数组不断划分为更小的数组,最后将小数组合并为大数组。
  • 快速排序:选择一个基准(pivot)元素,将小于基准的元素放在左边,大于基准的元素放在右边,然后递归对左右两部分进行排序。

排序算法示例代码

下面是使用Go语言实现常用排序算法的示例代码。其中,每个算法都定义为独立的函数,并按照算法名称进行命名。

冒泡排序

func bubbleSort(arr []int) {
    for i := 0; i < len(arr)-1; i++ {
        for j := 0; j < len(arr)-1-i; j++ {
            if arr[j] > arr[j+1] {
                arr[j], arr[j+1] = arr[j+1], arr[j]
            }
        }
    }
}

选择排序

func selectionSort(arr []int) {
    for i := 0; i < len(arr)-1; i++ {
        minIdx := i
        for j := i + 1; j < len(arr); j++ {
            if arr[j] < arr[minIdx] {
                minIdx = j
            }
        }
        arr[i], arr[minIdx] = arr[minIdx], arr[i]
    }
}

插入排序

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

归并排序

func mergeSort(arr []int) []int {
    if len(arr) <= 1 {
        return arr
    }
    mid := len(arr) / 2
    left := mergeSort(arr[:mid])
    right := mergeSort(arr[mid:])
    return merge(left, right)
}

func merge(left, right []int) []int {
    i, j := 0, 0
    result := make([]int, 0)
    for i < len(left) && j < len(right) {
        if left[i] < right[j] {
            result = append(result, left[i])
            i++
        } else {
            result = append(result, right[j])
            j++
        }
    }
    result = append(result, left[i:]...)
    result = append(result, right[j:]...)
    return result
}

快速排序

func quickSort(arr []int) []int {
    if len(arr) <= 1 {
        return arr
    }
    pivot := arr[0]
    left, right := make([]int, 0), make([]int, 0)
    for i := 1; i < len(arr); i++ {
        if arr[i] < pivot {
            left = append(left, arr[i])
        } else {
            right = append(right, arr[i])
        }
    }
    left = quickSort(left)
    right = quickSort(right)
    result := append(append(left, pivot), right...)
    return result
}

算法测试

为了测试示例代码的正确性,我们可以定义一个测试函数,输入一个未排序的数组,然后使用不同的排序算法进行排序,并输出排序结果。

func testSort() {
    arr := []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
    fmt.Println("--- before sort ---")
    fmt.Println(arr)
    bubbleSort(arr)
    fmt.Println("--- after bubble sort ---")
    fmt.Println(arr)
    arr = []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
    selectionSort(arr)
    fmt.Println("--- after selection sort ---")
    fmt.Println(arr)
    arr = []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
    insertionSort(arr)
    fmt.Println("--- after insertion sort ---")
    fmt.Println(arr)
    arr = []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
    arr = mergeSort(arr)
    fmt.Println("--- after merge sort ---")
    fmt.Println(arr)
    arr = []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
    arr = quickSort(arr)
    fmt.Println("--- after quick sort ---")
    fmt.Println(arr)
}

定义完测试函数后,我们就可以运行该函数来测试排序算法的正确性了。例如:

func main() {
    testSort()
}

输出结果如下:

--- before sort ---
[9 8 7 6 5 4 3 2 1]
--- after bubble sort ---
[1 2 3 4 5 6 7 8 9]
--- after selection sort ---
[1 2 3 4 5 6 7 8 9]
--- after insertion sort ---
[1 2 3 4 5 6 7 8 9]
--- after merge sort ---
[1 2 3 4 5 6 7 8 9]
--- after quick sort ---
[1 2 3 4 5 6 7 8 9]

从结果可以看出,各种排序算法均能正确地将输入数组排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go语言实现常用排序算法的示例代码 - Python技术站

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

相关文章

  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
  • Flutter Dart快速排序算法示例详解

    Flutter Dart快速排序算法示例详解 介绍 快速排序是一种排序算法,其基本思想是选择一个基准元素,将数组分成两个子数组,其中一个子数组的元素都比基准元素小,另一个子数组的元素都比基准元素大。然后递归地对两个子数组进行快速排序。 实现步骤 选择一个基准元素,并将其从数组中移除。 遍历数组,将小于基准元素的元素放入一个新的左侧数组中,大于基准元素的元素放…

    算法与数据结构 2023年5月19日
    00
  • 使用C语言求解扑克牌的顺子及n个骰子的点数问题

    “使用C语言求解扑克牌的顺子及n个骰子的点数问题”,我们可以分别来看一下。 1. 求解扑克牌的顺子 首先我们需要了解什么是扑克牌的顺子,即五张连续的牌,如”10 J Q K A”等。因为一副牌里,最小的牌为2,最大的牌为A(即1),所以任何5张牌中最大和最小的差值不能超过4。 我们可以先将5张牌进行排序,然后用最大牌和最小牌计算差值,再去除所有大小王,如果差…

    算法与数据结构 2023年5月19日
    00
  • C语言实现桶排序的方法示例

    C语言实现桶排序的方法示例 桶排序是一种非常高效的排序算法,它的基本思想是将要排序的数据分到几个有序的桶中,每个桶内部再完成排序,最终按照桶的顺序依次连接起来。在本文中,我们将详细讲解如何使用C语言实现桶排序,并提供两个示例来帮助读者更好地理解它的实现过程。 实现步骤 桶排序的实现过程主要分为以下几个步骤: 创建桶:根据待排序数组的最大值和最小值,确定需要创…

    算法与数据结构 2023年5月19日
    00
  • Javascript排序算法之合并排序(归并排序)的2个例子

    下面我将详细讲解“Javascript排序算法之合并排序(归并排序)的2个例子”的完整攻略。该攻略包含以下内容: 合并排序算法的原理介绍 归并排序实现流程 两个例子的具体实现及演示 合并排序算法的原理介绍 合并排序是一种基于分治思想的排序算法。它的基本思路是将待排序序列分成若干个子序列,对每个子序列递归地进行排序,最后合并所有子序列,得到最终的排序结果。 具…

    算法与数据结构 2023年5月19日
    00
  • c++数组排序的5种方法实例代码

    C++ 数组排序的 5 种方法实例代码 本篇文章介绍了使用 C++ 实现数组排序的 5 种方法,包括冒泡排序、选择排序、插入排序、希尔排序和快速排序。下面我们就分别详细阐述各种排序方法的实现。 冒泡排序 冒泡排序的基本思想是比较相邻的两个元素,如果顺序错误就交换位置。我们重复地执行这个过程,直到排序完成。示例代码如下: void BubbleSort(int…

    算法与数据结构 2023年5月19日
    00
  • PHP简单选择排序(Simple Selection Sort)算法学习

    PHP简单选择排序(Simple Selection Sort)算法学习 算法介绍 简单选择排序,也称直接选择排序,是一种简单直观的排序算法,其基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序的时间复杂度为 $O(n^2)$,不适用于大规模数据排序。但选择排序的思想被很多高级排序…

    算法与数据结构 2023年5月19日
    00
  • java图搜索算法之图的对象化描述示例详解

    Java图搜索算法之图的对象化描述示例详解 什么是图? 图是一种非线性数据结构,由节点和边组成,节点表示图中对象,边表示节点间相互关系。图分为有向图和无向图,有向边和无向边。 图的对象化描述 Java中可以使用对象化的方式来描述一个图,主要有两个类: Vertex(节点类) 节点类表示图中的节点,主要有两个属性: label:节点标签,用于区分不同节点。 w…

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