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