算法:冒泡排序

作者: 小码侠 | 来源:发表于2018-10-23 22:18 被阅读2次

    冒泡算法

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

    它不停的遍历需要排序的元素列表,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。直到没有元素需要交换为止。

    如需要对以下数据排序:

    {5, 2, 4, 3, 1}

    程序运行过程如下:

    第1次

    1. [2 5 4 3 1]
    2. [2 4 5 3 1]
    3. [2 4 3 5 1]
    4. [2 4 3 1 5]

    第2次

    1. [2 4 3 1 5]
    2. [2 3 4 1 5]
    3. [2 3 1 4 5]

    第3次

    1. [2 3 1 4 5]
    2. [2 1 3 4 5]

    第4次

    1. [1 2 3 4 5]

    原理总结

    循环比较相邻两个元素,如果第一个比第二个大,就交换它们的位置。

    代码实现

    go

    package main
    
    import "fmt"
    
    func main() {
        //声明数组
        numbers := []int{5, 2, 4, 3, 1}
        length := len(numbers)
        //构建遍历循环
        for i := 0; i < length-1; i++ {
            fmt.Printf("**第 %d 次**\n", i+1)
            for j := 0; j < length-i-1; j++ {
                //fmt.Println(i,j)
                //对比两个相邻元素
                if numbers[j] > numbers[j+1] {
                    //如果如果第一个比第二个大,就交换它们的位置。 【顺序】
                    //倒序反之:如果第一个比第二个小,就交换它们的位置。
                    numbers[j+1], numbers[j] = numbers[j], numbers[j+1]
                }
                fmt.Printf("%d. %v\n", j+1, numbers)
            }
        }
    }
    

    JS

    let numbers = [5, 2, 4, 3, 1];
    let len = numbers.length;
    //构建遍历循环
    for (let i = 0; i < len - 1; i++) {
        for (let j = 0; j < len - i - 1; j++) {
            //对比两个相邻元素
            if (numbers[j] > numbers[j + 1]) {
                //如果如果第一个比第二个大,就交换它们的位置。 【顺序】
                //倒序反之:如果第一个比第二个小,就交换它们的位置。
    
                //解构交换位置
                [numbers[j + 1], numbers[j]] = [numbers[j], numbers[j + 1]]
            }
        }
    }
    console.log(numbers);
    // [ 1, 2, 3, 4, 5 ]
    

    PHP

    <?php
    $numbers = array(5, 2, 4, 3, 1);
    $len = count($numbers);
    //构建遍历循环
    for ($i = 0; $i < $len - 1; $i++) {
        for ($j = 0; $j < $len - $i - 1; $j++) {
            //对比两个相邻元素
            if ($numbers[$j] > $numbers[$j + 1]) {
                //如果如果第一个比第二个大,就交换它们的位置。 【顺序】
                //倒序反之:如果第一个比第二个小,就交换它们的位置。
    
                //解构交换位置
                //[numbers[j + 1], numbers[j]] = [numbers[j], numbers[j + 1]]
                list($numbers[$j + 1], $numbers[$j]) = array($numbers[$j], $numbers[$j + 1]);
            }
        }
    }
    
    print_r($numbers);
    /*
        Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )
    
    */
    

    Python

    numbers=[5, 2, 4, 3, 1]
    length=len(numbers)
    for i in range(length-1):
        for j in range(length-i-1):
            # 如果如果第一个比第二个大,就交换它们的位置。 【顺序】
            # 倒序反之:如果第一个比第二个小,就交换它们的位置。
            if numbers[j] > numbers[j + 1]:
                numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
    print(numbers)
    # [1, 2, 3, 4, 5]
    
    

    微信搜索:小码侠

    长按二维码关注我们

    相关文章

      网友评论

        本文标题:算法:冒泡排序

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