简单选择排序法

Posted 算法精解

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单选择排序法相关的知识,希望对你有一定的参考价值。

简介

选择排序(Selection Sort)的基本思想:对n个记录进行扫描,选择最小的记录,将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录输出······不断重复这个过程,直到只剩一个记录为止,即可完成数据从小到大的排序过程。
选择排序常用的算法有:简单选择排序和堆排序,本篇介绍简单排序法。

算法描述

简单排序法类似人的排序习惯:从数据中选择最小(或最大)的一个数据,然后将该数据与第一个数交换,接下来从剩下的数据中选择最小(或最大)的一个数,第2个数据进行交换······如此不断重复,直至只剩下一个数据为止。
下面以一组待排序的数据来演示简单选择排序的过程,假设有8个需要排序的数据序列如下:

69,65,90,37,92,6,28,54

使用简单选择排序法进行排序的过程如图1所示。

图1 简单选择排序过程

首先对数组中原始数据进行扫描,找到最小的一个数6,与第一个元素69进行交换,完成第一遍选择排序的结果,然后不断重复这个过程,到第7遍扫描后,完成整个数据序列的排序。
需要注意的是,某一遍扫描没有数据交换并不能说明数据就已经按顺序排好了,还必须进行后续的扫描。

算法实现

简单选择排序Golang代码示例如下:

package selectionSort
func SelectionSort(arr []int, n int) { for i := 0; i < n - 1; i++ { // 记录需要和第k个元素交换 k := i for j := i + 1; j < n; j++ { // 查找最小数据,保存其序号在k中 if arr[k] > arr[j] { k = j } } arr[i], arr[k] = arr[k], arr[i] }}

测试用例:

func TestSelectionSort(t *testing.T) { rand.Seed(time.Now().Unix()) var arr []int for i := 0; i < 10; i++ { temp := rand.Intn(1000) arr = append(arr, temp) } origin_sort, origin := append([]int{}, arr...), append([]int{}, arr...) sort.Ints(origin_sort) selectionSort.SelectionSort(arr, len(arr)) if !reflect.DeepEqual(origin_sort, arr) { t.Errorf("Got %v for input %v; expected %v", arr, origin, origin_sort) }}

测试结果如图2所示:

图2 测试结果

相关文章:

《零基础学算法第2版》4.4简单选择排序法

以上是关于简单选择排序法的主要内容,如果未能解决你的问题,请参考以下文章

C语言选择排序法

算法 之 简单选择排序法

重温基础算法内部排序之简单插入排序法

java常用八大排序法

001 C/C++ 选择排序法

找到多个名为 [spring_web] 的片段。这对于相对排序是不合法的