算法-选择排序

该文章详细介绍了选择排序算法的工作原理,包括每次找出最小(大)值并交换到前面的过程,以及其O(1)的空间复杂度和O(n²)的时间复杂度。还提供了一个用Go语言编写的实现选择排序的函数示例,支持升序和降序排列。
摘要由CSDN通过智能技术生成

go 选择排序

选择排序

每次检索找到最小(大)的值放在最前面,再从剩余的未排序元素放到依次放到前面

空间复杂度 :f(1 + 1) = O(1)

时间复杂度 :f((n-1)+(n-2)+……+1 = f(n(n-1)/2) = O(n²)

过程:

1、记住第一点的位置 , 把第一点位置与数组每个元素比较,只要大于第一点的位置,则记住新位置与后面的值比较,比较完毕,则找到了这个数组中最大的值,把该值与第一位交换

2、再从第二位开始重复第一点的比较

3、最终 前面部分会先排好,后面的慢慢排下去

4、第一遍比较,执行次数为(n-1) , 第二遍因为第一位已经排好则少了一次(n-1-1) ,第三遍因为前两位已排好,则(n-1-1-1)

/**
 * @author Yel
 * 选择排序
 * 每次检索找到最小(大)的值放在最前面,再从剩余的未排序元素放到依次放到前面
 * 空间复杂度 :f(1 + 1) = O(1)
 * 时间复杂度 :f((n-1)+(n-2)+……+1 = f(n(n-1)/2) = O(n²)
 * 过程:
 * 1\记住第一点的位置 , 把第一点位置与数组每个元素比较,只要大于第一点的位置,则记住新位置与后面的值比较,比较完毕,则找到了这个数组中最大的值,把该值与第一位交换
 * 2\再从第二位开始重复第一点的比较
 * 3\最终 前面部分会先排好,后面的慢慢排下去
 * 4\第一遍比较,执行次数为(n-1) , 第二遍因为第一位已经排好则少了一次(n-1-1) ,第三遍因为前两位已排好,则(n-1-1-1)
 */
func Selectionsort(arr []int, order string) {
	var length = len(arr) // 长度
	if length < 2 {
		return
	}
	var index int = 0 // 索引
	// 每个元素 都和 后面的元素对比
	for i := 0; i < length-1; i++ {
		index = i // 最小最大值
		// 找到最小(大)的,然后保留索引
		for j := i + 1; j < length; j++ {
			// 升序
			if order == "asc" {
				// 当前位置比索引大,则记录索引,和后面的比较
				if arr[index] > arr[j] {
					index = j
				}
			} else {
				// 降序
				if arr[index] < arr[j] {
					index = j
				}
			}
		}
		if index == i {
			continue
		}
		// 交换位置
		arr[index], arr[i] = arr[i], arr[index]
	}
	return
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值