美文网首页
【golang】冒泡排序和选择排序

【golang】冒泡排序和选择排序

作者: 七八个星天 | 来源:发表于2021-01-04 12:30 被阅读0次
冒泡排序
  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
package main

import "fmt"

/**
冒泡排序:将每一个数同相邻的下一个数对比,比下一个数大则交换位置.
 */
func bubble(list []int) []int {
    //用来判断是否完成了排序
    flag:=true
    len := len(list)
    for i:=0;i<len-1;i++{
        //预设这一轮没发生数的交换,在比较中,如果发生了数的交换,则把flag置为false
        flag=true
        for j:=0;j<len-1-i;j++{
            if list[j]>list[j+1]{
                //在这一轮中有数的交换
                flag=false
                list[j],list[j+1] = list[j+1],list[j]
            }
        }
        //如果这一轮中没有数的交换,就表示已经排序完成,直接跳出循环
        if flag{
            break
        }
    }
    return list
}
func main() {
    list := []int{32,31,23,45,678,32,9,12}
    fmt.Println(list)
    fmt.Println(bubble(list))
}

运行结果:

[32 31 23 45 678 32 9 12]
[9 12 23 31 32 32 45 678]

flag的作用:排序不一定会走完所有循环,有可能在中间就完成了排序。只要发现在某一轮的循环中,没有发生任何交换,就说明每一组都是前面的数比下一个数小,如此就不用再往下进行,终止循环。

选择排序
  • 每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置。
  • 再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
  • 选择排序是一个不稳定的排序算法。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法
package main

import "fmt"

/**
比较排序:
将一个元素依次与后面所有元素标记,如果大于后面的元素,就交换.
依次对除最后一个元素的所有元素执行上面的步骤
*/
func compare(list []int) []int {
    len := len(list)
    for i:=0;i<len-1;i++{
        for j:=i+1;j<len;j++{
            if list[i]>list[j]{
                list[j],list[i] = list[i],list[j]
            }
        }
    }
    return list

}
func main() {
    list := []int{32,31,23,45,678,32,9,12}
    fmt.Println(list)
    fmt.Println(compare(list))
}

运行结果:

[32 31 23 45 678 32 9 12]
[9 12 23 31 32 32 45 678]

相关文章

  • 【golang】冒泡排序和选择排序

    冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个 对每一对相邻元素做同样的工作,从开始第一对到结尾的...

  • JAVA简单排序

    选择排序和冒泡排序: 排序结果

  • 常用的两种排序-冒泡、选择

    Swift版 冒泡排序 选择排序 OC版 冒泡排序 选择排序

  • 冒泡算法/选择排序算法/直接插入排序算法C语言实现

    排序算法 冒泡排序 选择排序 冒泡排序和选择排序的核心思路: 冒泡排序是:相邻两个元素两两进行比较,小则交换位置。...

  • android算法 - 排序

    冒泡排序 选择排序 插入排序 快速排序 堆排序 其中简单排序就是冒泡排序,选择排序和插入排序。继而在分冶合并思想上...

  • 数据结构与算法 - 排序

    代码实现基于golang version 1.18 1. 冒泡排序 冒泡排序是一种交换排序,核心是冒泡,把数组中...

  • OC中的排序算法

    目录 冒泡排序、快速排序、选择排序、插入排序 冒泡 快排 选择 插入

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

  • python实现经典排序算法

    冒泡排序 这里是向前冒泡,即每一趟排序后最小元素冒泡至最前 选择排序 选择排序和冒泡相似,每一趟排序完后将最小元素...

  • Java实现常见的算法

    主要罗列了常见的选择排序,冒泡排序和快速排序,还有二分查找的算法。 选择排序 冒泡排序 快速排序 二分查找 注意二...

网友评论

      本文标题:【golang】冒泡排序和选择排序

      本文链接:https://www.haomeiwen.com/subject/fztvoktx.html