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日

相关文章

  • JS插入排序简单理解与实现方法分析

    JS插入排序简单理解与实现方法分析 描述 插入排序是一种比较简单的排序方法,它的核心思想是将待排序的元素,依次插入到已经排好序的部分,从而逐渐将整个序列排好。具有较好的稳定性和适用性。 实现思路 插入排序的实现思路: 将第一个元素当做已经排序好的序列 从第二个元素开始遍历整个数组 回溯已经排序好的序列,将当前元素插入到比它大的元素之前 重复2、3步骤直到排序…

    算法与数据结构 2023年5月19日
    00
  • 合并排序(C语言实现)

    合并排序(C语言实现) 合并排序是一种将待排序序列分成多个子序列,分别进行排序,然后再将排序后的子序列合并成整体有序序列的排序算法。使用递归实现时,该算法的时间复杂度为O(nlogn),因此被广泛应用。 实现步骤 合并排序可以用以下步骤来实现: 分治:将待排序序列从中间分成两部分,递归地对左右两部分进行排序。 合并:将两个有序子序列合并成一个有序序列。 在实…

    算法与数据结构 2023年5月19日
    00
  • Java的Arrays.sort()方法排序算法实例分析

    Java的Arrays.sort()方法排序算法实例分析 在Java中,我们可以使用Arrays.sort()方法对数组进行排序。这个方法具有良好的性能和适应性。 然而,不了解其实现原理可能会产生些困惑,我们在这里将从排序算法本身的角度,详细讲述如何使用Arrays.sort()方法并提高其性能。 排序算法 Arrays.sort()方法使用的排序算法是不稳…

    算法与数据结构 2023年5月19日
    00
  • JS简单数组排序操作示例【sort方法】

    JS简单数组排序操作示例【sort方法】 操作说明 在JavaScript中,通过数组的sort()方法可以对数组进行排序操作。sort()方法会直接对原数组进行排序,返回排序后的原数组。 sort()方法通常需要传入一个比较函数,来指定排序规则。比较函数接收两个参数,分别表示待比较的两个元素,如果返回值小于0,则表示第一个元素排在第二个元素前面;如果返回值…

    算法与数据结构 2023年5月19日
    00
  • JavaScript数据结构与算法之二叉树添加/删除节点操作示例

    首先让我们来介绍一下“JavaScript数据结构与算法之二叉树添加/删除节点操作示例”这个主题。 主题介绍 本主题主要介绍了在 JavaScript 中对于二叉树数据结构进行添加/删除节点操作的示例代码。二叉树是一种常见的树形结构,在计算机科学领域中被广泛应用。节点的添加与删除是该数据结构中常见的操作之一,本主题将通过示例代码,为您详细介绍操作的过程。 代…

    算法与数据结构 2023年5月19日
    00
  • 解析左右值无限分类的实现算法

    下面为你详细讲解“解析左右值无限分类的实现算法”的完整攻略: 1. 了解左右值无限分类 左右值无限分类,也称为嵌套集合模型,是一种常见的无限分类方式。在该模型中,每个分类都有一个左值和右值,通过比较左右值大小,可以判断出一个分类是否是另一个分类的子分类或者父分类。支持多层级分类,可以无限嵌套。 2. 左右值无限分类的实现算法 左右值无限分类的实现算法分为两步…

    算法与数据结构 2023年5月19日
    00
  • C语言实现交换排序算法(冒泡,快速排序)的示例代码

    C语言实现交换排序算法(冒泡排序、快速排序)通常分为以下步骤: 分析算法:首先,我们需要对选定的排序算法进行仔细的分析,了解排序过程中的基本操作、时间复杂度和空间复杂度等基本信息。 编写函数:依照分析结果,编写函数实现排序算法。同时,考虑如何优化代码以提高排序效率。 测试函数:编写测试代码对排序函数进行测试,检查是否正确。 以下是两个示例说明: 冒泡排序 冒…

    算法与数据结构 2023年5月19日
    00
  • C语言 实现归并排序算法

    C语言实现归并排序算法的攻略如下: 展示归并排序算法思路 先将待排序的序列拆分成若干小规模子序列,直到每个子序列可以直接排序为止。 然后对每个子序列进行排序,合并成新的有序序列。 重复第二步,直到只剩下一个排序完毕的序列。 C语言代码实现 下面是一份C语言实现归并排序算法的代码,代码内部有详细的注释,可以帮助理解代码: #include <stdio.…

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