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

2021-01-04  本文已影响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的作用:排序不一定会走完所有循环,有可能在中间就完成了排序。只要发现在某一轮的循环中,没有发生任何交换,就说明每一组都是前面的数比下一个数小,如此就不用再往下进行,终止循环。

选择排序
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]
上一篇 下一篇

猜你喜欢

热点阅读