OneBigLoser
OneBigLoser
发布于 2024-06-29 / 13 阅读
0
0

冒泡排序-可以想象成在水中的气泡不断上浮的过程

基本概念

冒泡排序(Bubble Sort)是一种简单的排序算法。它反复遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换过来,直到整个数列有序。因为在排序过程中,大的元素会逐渐“冒泡”到数列的顶端,故名冒泡排序。

冒泡排序的用途

  • 小规模数据排序:适合于小规模数据的排序。

  • 教学和学习:由于其简单性,经常用于教学排序算法的基本概念。

  • 在游戏开发中的用途

    • 排序游戏得分:对玩家得分进行排序。

    • 整理物品:在游戏的库存系统中对物品进行排序。

基本原理

冒泡排序通过多次比较和交换相邻元素,将较大的元素逐步移到数列的末尾。具体步骤如下:

  1. 从数组的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。

  2. 每一轮比较后,最大的元素会移动到数组的末尾。

  3. 重复上述步骤,直到整个数组有序。

语法规则和声明

冒泡排序的算法步骤:

  1. 比较相邻的元素。如果前一个元素比后一个元素大,就交换它们。

  2. 对每一对相邻元素做同样的工作,从开始的第一对到结尾的最后一对。执行完一轮比较后,最后的元素会是最大的数。

  3. 忽略最后的元素,对剩余的元素重复步骤1和步骤2,直到所有元素有序。

优点和缺点

优点

  • 简单易懂:算法逻辑简单,容易实现。

  • 适用于小规模数据:在小规模数据情况下,算法效果还算可以。

缺点

  • 效率低下:对于大型数据集,冒泡排序的效率非常低,时间复杂度为 O(n^2)。

  • 不适用于大规模数据:当数据量很大时,冒泡排序的性能会变得很差。

示例代码

冒泡排序实现

using System;

public class Program
{
    // 冒泡排序函数
    public static void BubbleSort(int[] array)
    {
        int n = array.Length;
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = 0; j < n - i - 1; j++)
            {
                if (array[j] > array[j + 1])
                {
                    // 交换元素
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }

    // 主函数
    public static void Main()
    {
        int[] numbers = { 64, 34, 25, 12, 22, 11, 90 };
        Console.WriteLine("未排序数组:");
        Console.WriteLine(string.Join(", ", numbers));

        BubbleSort(numbers);

        Console.WriteLine("排序后数组:");
        Console.WriteLine(string.Join(", ", numbers));
    }
}

//优化后的方法
static void BubbleSort(int[] intArray) {
    int temp = 0;
	int n = array.Length;
    bool swapped;
    for (int i = 0; i < n-1 ; i++)
    {
        swapped = false;
        for (int j = 0; j < n  - 1 - i; j++)
            if (intArray[j] > intArray[j + 1])
            {
                temp = intArray[j];
                intArray[j] = intArray[j + 1];
                intArray[j + 1] = temp;
                if (!swapped)
                    swapped = true;
            }
        if (!swapped)
            return;
    }
}

解释

  • BubbleSort 函数包含两个嵌套的 for 循环,外层循环控制遍历次数,内层循环控制元素的比较和交换。

  • 每次内层循环比较相邻的两个元素,如果前一个元素大于后一个元素,就交换它们的位置。

  • 外层循环的每次迭代,都会把当前最大的元素移到数组的末尾。

基础练习题目

  1. 实现冒泡排序算法,并对一组整数数组进行排序。

  2. 修改冒泡排序算法,使其能够对一组浮点数数组进行排序。

  3. 编写一个程序,使用冒泡排序对一组字符串数组按字母顺序进行排序。

进阶练习题目

  1. 优化冒泡排序算法,当在一轮比较中没有发生交换时,提前结束排序过程。

  2. 编写一个程序,比较冒泡排序与其他排序算法(如插入排序、选择排序)在不同规模数据集上的性能。

  3. 实现双向冒泡排序(鸡尾酒排序),使得每次遍历不仅将最大值移到数组末尾,还将最小值移到数组开头。

总结

  • 冒泡排序是一种简单的排序算法,通过反复比较和交换相邻元素来排序。

  • 用途:适用于小规模数据的排序,教学和学习排序算法。

  • 优点:算法简单易懂,适合教学。

  • 缺点:效率低下,不适用于大规模数据。


评论