尝试通过Golang实现一个简单的选择排序,以便于后续使用。

通过Golang实现对应的选择排序,以加深对应的逻辑理解

原理剖析:

选择排序(Selection Sort)是一种简单直观的排序算法,其主要思想是反复从未排序部分选择最小或最大的元素,将其放到已排序部分的末尾。选择排序不需要额外的空间,属于原地排序算法。下面详细讲解选择排序的原理。

选择排序的步骤:

选择排序的主要步骤包括:

  1. 找到最小值:在未排序的部分中找到最小的元素。
  2. 交换位置:将这个最小的元素与未排序部分的第一个元素交换位置,从而使得该最小元素进入已排序部分。
  3. 重复上述步骤:对于剩下的未排序部分,继续执行上述操作,直到所有元素都排序完毕。

1.定义一个回调函数类型

通过对应的回调函数实现判断是否需要交换

type compare func(a interface{}, b interface{}) bool//定义一个回调函数类型

2.开始编写对应的函数(详见注释)

// 选择排序
func SelectionSort(arr []interface{}, op compare) {
	// 遍历数组,i 是当前排序部分的最后一个元素索引
	for i := 0; i < len(arr)-1; i++ {
		minIndex := i // 假设当前 i 是未排序部分的最小值
		// 从 i+1 开始遍历剩余未排序部分,寻找最小值
		for j := i + 1; j < len(arr); j++ {
			if op(arr[j], arr[minIndex]) { // 如果找到更小的值,更新最小值索引
				minIndex = j
			}
		}
		// 如果最小值索引发生变化,交换元素
		if minIndex != i {
			arr[i], arr[minIndex] = arr[minIndex], arr[i]
		}
	}
}

3.调用测试

type Person struct {
    Name string
    Age  int
}
func (p Person)String()string{
	return fmt.Sprintf("Name: %s, Age: %d",p.Name,p.Age)
}
func compare(a interface{}, b interface{}) bool {
	return a.(Person).Age < b.(Person).Age
}
func main() {
	arrays := []interface{}{
		Person{Name:"A", Age:11},
		Person{Name:"B", Age:12},
		Person{Name:"C", Age:22},
		Person{Name:"D", Age:67},
		Person{Name:"E", Age:100},
	}
	fmt.Println("Before Sorting")
	for _,v := range arrays{
		fmt.Println(v)
	}
	api.SelectionSort(arrays,compare)
	fmt.Println("After Sorting")
	for _,v := range arrays{
		fmt.Println(v)
	}
}

4.呈现结果

Before Sorting
Name: A, Age: 11
Name: B, Age: 12
Name: C, Age: 22
Name: D, Age: 67
Name: E, Age: 100
After Sorting
Name: A, Age: 11
Name: B, Age: 12
Name: C, Age: 22
Name: D, Age: 67
Name: E, Age: 100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值