基础排序算法总结(1) | 青训营笔记

104 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

排序算法是非常常用的一种算法,是最常用的算法之一,下面总结几种常用的排序算法。

冒泡排序

冒泡排序是一种简单的排序算法,其基本思想是反复遍历要排序的数列,每次比较相邻的两个元素,如果它们的顺序不符合要求就交换它们,直到整个数列都有序为止。

以下是使用golang实现冒泡排序的代码:

func bubbleSort(arr []int) {
    n := len(arr)
    for i := 0; i < n-1; i++ {
        for j := 0; j < n-i-1; j++ {
            if arr[j] > arr[j+1] {
                // 交换arr[j]和arr[j+1]的位置
                arr[j], arr[j+1] = arr[j+1], arr[j]
            }
        }
    }
}

在这个实现中,我们首先获取数组的长度,然后使用两个嵌套的for循环来遍历数组。外层循环从第一个元素开始遍历到倒数第二个元素,内层循环从第一个元素开始遍历到当前未排序部分的最后一个元素。在内层循环中,我们比较相邻的元素,如果它们的顺序不符合要求就交换它们的位置。当内层循环结束时,最大的元素会被移到未排序部分的最后一个位置。这样,每次外层循环都会将一个元素移动到它的最终位置,直到整个数组都有序为止。

插入排序

插入排序是一种简单的排序算法,其基本思想是将待排序的元素逐个插入已经排好序的部分中,形成新的有序序列。

以下是使用golang实现插入排序的代码:

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

在这个实现中,我们首先获取数组的长度,然后使用一个for循环遍历数组,从第二个元素开始到最后一个元素。对于每个待排序的元素,我们将它存储在变量key中,然后使用一个内层循环将它插入已经排好序的部分中。内层循环从当前元素的前一个元素开始向前遍历,直到找到第一个小于或等于key的元素,然后将key插入到这个元素的后面。当内层循环结束时,整个数组的前i个元素都已经排好序了。

插入排序是一种稳定的排序算法,其时间复杂度为O(n^2),但是当待排序的数组已经基本有序时,插入排序的效率非常高,接近O(n)。