Golang编程——选择排序(Select Sort)

in golang •  6 years ago 

选择排序

常见排序方法:

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序

1.冒泡排序

冒泡排序的(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。

因为排序的过程中,个元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个flag判断元素是否进行过交换。从而减少不必要的比较。

//在数组章节

2.选择排序

选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。

  • 选择排序思想:

选择排序(select sorting) 也是一种简单的比较方法。它的基本思想是:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换;

第二次从R[1]~R[n-1]中选取最小值,与R[1]交换;

第三次从R[2]~R[n-1]中选取最小值,与R[2]交换;......

第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,....

第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,

总共通过n-1次,得到一个按顺序码从小到达排列的有序序列。

选择排序应用实例:

package main

import (
    "fmt" 
)

//编写函数selectSort,完成排序;
func SelectSort(arr *[6]int) {

    //标准的访问方式
    // (*arr)[1] = 600  <==> arr[1] = 600,编译器底层优化的功劳;
    // arr[1] = 600

    //1.先完成将第一个最大值和arr[0] ==> 先易后难;
    //假设 arr[0] 就是最大值;
    for j := 0; j < len(arr)-1; j++ {
        max := arr[j]
        maxIndex := j
        //遍历后面,1---[len(arr)-1] 比较;
        for i := j + 1; i < len(arr); i++ {
            if max < arr[i] { //找到真真的最大值
                max = arr[i]
                maxIndex = i
            }
        }
        //交换:
        if maxIndex != j {
            arr[j], arr[maxIndex] = arr[maxIndex], arr[j]
        }
        fmt.Printf("第%d次循环:%v\n", j+1, *arr)
    }

}

func main() {

    //定义一个数组,从大到小排序
    arr := [6]int{10, 34, 19, 100, 80, 789}
    fmt.Println("排序前:", arr)
    SelectSort(&arr)
    fmt.Println("排序后:", arr)
}
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!