基础算法-排序|选择排序

231 阅读1分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

三言两语

搞懂基础算法系列之排序算法-选择排序

关键点:时间复杂度:O(n^2)

解题思路

选择排序,是通过寻找最小的数后放在起始位置,不断循环,选择剩余最小的数后进行放置,以此类推,直到所有的数据都排序完毕。

解题演示

题目:数组ary = [14, 7, 6, 19, 10, 16],进行升序排序

第一轮:i=0,minIndex = 0 ,j= i+1 依次比较 ary[j] <= ary[minIndex],找到7<14,那么 minIndex = 1,j++ 继续比较,直到比较结束:minIndex= 2,ary[i] 与ary[minIndex]替换:6,7,14,19,10,16

第二轮:i=1,minIndex =1 ,继续比较,直到结束:minIndex=1 和i=1一致,6,7,14,19,10,16

第三轮:i=2,minIndex=2,继续比较。直到结束:minIndex= 4,替换后:6,7,10,19,14,16

第四轮:i=3,minIndex=3,继续比较。直到结束:minIndex= 4,替换后:6,7,10,14,19,16

第五轮:i=4,minIndex=3,继续比较。直到结束:minIndex=5,替换后:6,7,10,14,16,19

则最后结果:6,7,10,14,16,19

代码实现

Golang版本实现

func sortXuanze(ary []int) {
  if len(ary) > 1 {
    minIndex := 0
    for i := 0; i < len(ary)-1; i++ {
      minIndex = i
      for j := i + 1; j < len(ary); j++ {
        if ary[j] <= ary[minIndex] {
          minIndex = j
        }
      }
​
      if minIndex != i {
        ary[i], ary[minIndex] = ary[minIndex], ary[i]
      }
    }
  }
​
  for _, v := range ary {
    fmt.Print(v, ",")
  }
}

JavaScript版本实现

// 选择排序
function sortXuanze(ary) {
    if(ary.length >1) {
        let minIndex = 0;
        for (let i = 0; i<ary.length - 1; i++){
            minIndex = i;
            for(let j = i+1; j <ary.length; j++) {
                if(ary[j] <= ary[minIndex]) {
                    minIndex = j
                }
            }
            if( minIndex != i) {
                let temp = ary[i];
                ary[i] = ary[minIndex];
                ary[minIndex] = temp;
            }
        }
    }
    console.log(ary)
}