go语言的冒泡排序和插入排序

编程即数学,在编程中也会遇到很多的数学问题的集合,今天我们来讲解一下编程中最常见的冒泡排序,以及冒泡排序之后的插入排序
1:冒泡排序,见名知意,冒泡在我们生活当中可以有哪些常见的事物呢,比如在生活当中,大家都见到过烧开水的状态,那么水中的气泡就会不断的往上面漂浮,应用物理学上的知识来讲就是气泡的质量比较轻,在水中有浮力,就会不断的上浮,那么我们应该怎样应用到编程中的冒泡排序呢,我们先来看一段代码,然后慢慢分析

package main
import "fmt"
//func main() {
    arr := [10]int{9, 1, 5, 6, 3, 7, 10, 8, 2, 4}  //先定义一个乱序数组
    //冒泡排序

    for i := 0; i < 10-1; i++ {         //外面的循环用来循环次数
        for j := 0; j < 10-1-i; j++ {    //里面的循环用来循环 每次对比到哪里
            if arr[j] > arr[j+1] {
                //数据交换
                arr[j], arr[j+1] = arr[j+1], arr[j]  //go语言的多个数据交换格式
                //temp := arr[j]   //普通数据交换格式
                //arr[j] = arr[j+1]
                //arr[j+1] = temp
            }
        }  
    }
    fmt.Println(arr)
}

这里写图片描述
我们看到这个代码和这张图片,在图片中我们只写了前面几次,先来看第一次,第一个元素和第二个相比4比2大,如果第一个元素比第二个大那么就交换一下,然后第二个元素和第三个相比,如果大就交换,然后第三第四相比,第四第五相比,一直比到最后一个和倒数第一个,有没有发现这样比一次就能确定一个最大的数,而且最大的数是放在最后一个元素里面的,这样一次就是外面的外循环

for i := 0; i < 10-1; i++ {  //这句话就是外面的循环

然后确定第一个最大的放最后一个,那么我们然后怎么办呢 ,然后我们当然继续下一次对比然后再确定一个第二大的放在倒数第二的位置啊,最大的确定下来后,我们继续从第一个开始遍历,但是这次遍历要注意了,不需要遍历到最后一个元素,而只需遍历到倒数第二个就行了,这是为什么呢,因为最后一个元素已经确定下来是最大的了,所以就不需要对比了,我们来看内循环

for j := 0; j < 10-1-i; j++ {    //里面的循环用来循环 每次对比到哪里
//这里的判断条件是 小于10-1-i,i是什么呢,就是外循环的次数,所以只需要对比到10-1-i就行

然后内循环每次对比相邻的两个元素,如果前面大于后面的那么就交换,

//数据交换
                arr[j], arr[j+1] = arr[j+1], arr[j]  //go语言的多个数据交换格式
                //temp := arr[j]   //普通数据交换格式
                //arr[j] = arr[j+1]
                //arr[j+1] = temp

这里面数据交换 有两种格式,第一种就是GO语言里面的简单交换格式,第二种是常见的交换数据格式,需要定义一个临时变量
然后可以打印出来数组,就变成从小到大的升序数组了,
那么如果要变成降序排序怎么改呢?
来看这句话

if arr[j] > arr[j+1] {

我们只需要把这里的大于号改成小于号就行啦

不喜勿喷,谢谢哈哈
插入排序后续

猜你喜欢

转载自blog.csdn.net/sgsgy5/article/details/81585758