3

冒泡排序

冒泡排序 ( Bubble Sort ),是排序算法中最简单的一种

一般都是我们新了解一门语言时拿来练手使用

今天也不例外,虽然用 C# 写过无数次的冒泡排序,但是毕竟换了一门语言,所以有必要再来实现一次

原理

1.冒泡

既然决定写文章记录,那么就要好好的写

我们说冒泡排序简单,那么为什么简单呢?就是因为容易理解

冒泡 Bubble,如其意,就像气泡一样,他会慢慢的从海底浮出水面

那么这一层一层的浮现也是我们冒泡排序的实现方式

2.原理

假设我们有如此数组 :

7 2 9 22 16 93 202 0 33 29 84

一共是 11 个数字

我们先给数字加上下标

7[0] 2[1] 9[2] 22[3] 16[4] 93[5] 202[6] 0[7] 33[8] 29[9] 84[10]

这里我们先假设要对数组进行从小到大的排序

那么首先:

  • 最小的数字应该在第一位

那如何保证最小的数字在第一位呢?

其实就是谁小谁来的道理

3.思路

1.我们拿第一位 [0] 也就是 7 依次向后方数字做比较,直到出现比 7 小的数字后,将该数字
7 交换位置

如:第二位 [1] 也就是 2 就比 7 小,那么 [0] 位置由 2 来占据, 7 暂居第二位 [1]

2.此时数组 [0] 为 2 ,再按照 1. 中方式依次向后比较

3.当 [7] 0 时, 再次满足交换条件,20 交换位置

4.最终确认 0 即最小值 ,那么第一位置确认,就是 0

5.下一步确认第二位 [1] 值 ... 重复上述步骤

图片描述

代码

// 冒泡
func Bubble_Sort(slice []int/* 待排序的切片 */, order bool/* true : 正序; false : 倒序; */) {

    /*
        1. 本循环代表 依次与其后所有数作比较的索引
        2. 由于最后一个数不用比较,所以 len(slice) - 1
    */
    for i := 0; i < len(slice) - 1; i++ {

        // 本循环代表 外层将要与哪一位作比较
        for k := i +1; k < len(slice); k++ {

            if (slice[i] > slice[k] && order) /* 从大到小 */ || (slice[i] <= slice[k] && !order ) /* 从小到大 */ {

                slice[i], slice[k] = slice[k], slice[i]

            }
        }
    }
}

结果

排序结果如图所示

图片描述


youbei
318 声望70 粉丝