Golang排序算法-选择排序

2018-04-29 10:47:15 george518 ...

名词解释

选择排序,主要针对位置来进行排序的算法。

假设对一组10个同学进行排序,排序的标准是其中考试成绩(便于理解,假设成绩没有重复的),按照成绩由低到高排序。

老师说:第一个位置的同学(选择位置),你和你后面所有的同学逐个比较成绩,如果你的成绩比该同学高,则你们俩互换位置,然后新的第一位的同学接着上次比较位置继续下去比较,同样,如果比另一位同学成绩高,再互换位置,互换位置后继续上次的比较方式

这样,可以找出第一个位置上的同学(成绩最低的同学)

依次查找成绩倒数第二的同学

所以,选择排序中的“选择”一词有两层含义,一是选择位置,二是选择此位置上合适的元素。

使用golang实现选择排序算法

需要注意的是,Go中的数组是引用型变量,所以可直接交换位置。

/************************************************************
** @Description: selection
** @Author: haodaquan
** @Date:   2018-08-30 22:18
** @Last Modified by:   haodaquan
** @Last Modified time: 2018-08-30 22:18
*************************************************************/
package selection

//每次查找剩余元素的最小值,交换位置
func Sort(arr []int) []int {
    len := len(arr)
    if len <= 1 {
        return arr
    }
    for i := 0; i < len; i++ {
        var minIndex = i
        for j := i + 1; j < len; j++ {
            if arr[minIndex] > arr[j] {
                minIndex = j
            }
        }
        arr[i], arr[minIndex] = arr[minIndex], arr[i]
    }
    return arr
}

测试代码和性能测试代码已经放到了github上,地址:

https://github.com/george518/PPGo_algorithm/tree/master/sort/selection

不妨一试

相似文章