go 实现选择排序

一 点睛

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

二 选择排序思想

选择排序(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"
)


// 完成选择排序,从大到小
func SelectSort(arr *[6]int) {
   // 1 先完成将第一个最大值和 arr[0] 进行交换,先易后难
   // 2 假设 arr[0] 最大值
   for j := 0; j < len(arr)-1; j++ {
      max := arr[j]
      maxIndex := j
      // 3 从 j+1 开始遍历,到 [len(arr) -1] 结束,和 max 进行比较
      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)
   }

   /*
      max = arr[1]
      maxIndex = 1
      // 遍历 2 到 [len(arr) -1]
      for i := 1 + 1; i < len(arr); i++ {
         if max < arr[i] { // 找到真正的最大值
            max = arr[i]
            maxIndex = i
         }
      }
      // 交换
      if maxIndex != 1 {
         arr[1], arr[maxIndex] = arr[maxIndex], arr[1]
      }
      fmt.Println("第2次 ", *arr)


      max = arr[2]
      maxIndex = 2
      // 2 遍历 3 到 [len(arr) -1]
      for i := 2 + 1; i < len(arr); i++ {
         if max < arr[i] { // 找到真正的最大值
            max = arr[i]
            maxIndex = i
         }
      }
      // 交换
      if maxIndex != 2 {
         arr[2], arr[maxIndex] = arr[maxIndex], arr[2]
      }
      fmt.Println("第3次 ", *arr)


      max = arr[3]
      maxIndex = 3
      // 遍历 4 到 [len(arr) -1]
      for i := 3 + 1; i < len(arr); i++ {
         if max < arr[i] { // 找到真正的最大值
            max = arr[i]
            maxIndex = i
         }
      }
      // 交换
      if maxIndex != 3 {
         arr[3], arr[maxIndex] = arr[maxIndex], arr[3]
      }
      fmt.Println("第4次 ", *arr)*/
}

func main() {
   // 定义一个数组 , 要求从大到小
   arr := [6]int{10, 34, 19, 100, 80, 789}
   SelectSort(&arr)
   fmt.Println(arr)
}

五 测试

[789 100 80 34 19 10]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值