欢迎访问宙启技术站
智能推送

简单选择排序(golang)

发布时间:2023-05-18 16:56:50

简单选择排序(Selection Sort)是一种简单但不高效的排序算法,它的时间复杂度为O(n2)。

选择排序的思路是:将待排序序列分成已经排序和未排序两部分,每次从未排序的部分中找出最小的元素,与未排序部分的 个元素交换位置,然后将其归入已排序序列。不断重复这个过程,直到整个序列有序。

下面是golang实现简单选择排序的代码:

func SelectionSort(arr []int) {
    n := len(arr)

    for i := 0; i < n-1; i++ {
        // 假设i位置即为最小值
        min := i

        // 在后面未排序部分中查找最小值
        for j := i + 1; j < n; j++ {
            if arr[j] < arr[min] {
                min = j
            }
        }

        // 如果最小值不在i位置,则交换位置
        if min != i {
            arr[i], arr[min] = arr[min], arr[i]
        }
    }
}

首先,我们获取待排序数组的长度n。然后,我们使用两个for循环,外部for循环控制已排序的部分,内部for循环控制未排序部分。

选择排序的核心代码就是内部for循环,我们假设i位置为最小值,然后在后面的未排序部分中找到真正的最小值,将其位置记录为min。如果min不等于i,则交换i位置和min位置的元素。

最后,我们返回已排序的数组。

以下是测试代码:

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

// Output: [1 2 3 4 5 6 7 8 9]

可以看到,待排序的数组被正确排序,输出结果为[1 2 3 4 5 6 7 8 9]。

总结:

简单选择排序是一种简单但不高效的排序算法,如果待排序的数组长度比较小,那么选择排序是一个不错的选择,但是如果数组长度很大,那么使用选择排序可能会导致程序的性能较差。建议在使用选择排序时,需要考虑到待排序数组的长度和排序时间复杂度。