找回密码
 立即注册
快捷导航

[算法/设计模式] 算法 —— 冒泡排序

[复制链接]
dlsite 2023-7-31 04:36:54 | 显示全部楼层

冒泡排序

一种简单的排序算法,其原理如下:

从待排序的数组的第一个元素开始,依次比较相邻的两个元素。

如果前面的元素大于后面的元素(升序排序),则交换这两个元素的位置,使较大的元素“冒泡”到右侧。

继续比较下一对相邻元素,重复步骤2,直到遍历到数组的倒数第二个元素。此时,最大的元素会被交换到数组的最后一个位置。

针对剩余尚未排序的元素,重复步骤1到步骤3。每次遍历过程中,最大的元素都会被放置到正确的位置上。

持续以上操作,直到所有元素都按照指定的顺序排列为止。

算法 —— 冒泡排序4490 作者:dlsite 帖子ID:555

2种方式

双重循环方式实现冒泡排序

/// <summary>
/// 双重循环方式实现冒泡排序
/// </summary>
public static void BubbleSort()
{
    int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };
    int arrLength = arr.Length;
    for (int i = 0; i < arrLength - 1; i++)
    {
        for (int j = 0; j < arrLength - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                //交换arr[j]和arr[j+1]的值
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    Console.WriteLine("排序后结果:" + string.Join(", ", arr));
}

递归方式实现冒泡排序

 /// <summary>
/// 递归方式实现冒泡排序
/// </summary>
/// <param name="arr">arr</param>
/// <param name="arrLength">arrLength</param>
public static void RecursiveBubbleSort(int[] arr, int arrLength)
{
    if (arrLength == 1)
        return;

    for (int i = 0; i < arrLength - 1; i++)
    {
        if (arr[i] > arr[i + 1])
        {
            //交换arr[i]和arr[i+1]的值
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
    }

    RecursiveBubbleSort(arr, arrLength - 1);
}

public static void RecursiveBubbleSortRun()
{
    int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };
    int arrLength = arr.Length;
    RecursiveBubbleSort(arr, arrLength);
    Console.WriteLine("排序后结果:" + string.Join(", ", arr));
}

总结

冒泡排序的名称来源于元素比较过程中,较大的元素会逐渐向右“冒泡”到正确的位置上。它的时间复杂度为O(n^2),在实际应用中适用于数据规模较小的情况。在实际应用中,我们需要根据具体情况选择合适的实现方式来平衡代码的可读性和排序效率。同时,如果对排序算法的效率要求较高,可以考虑使用其他更高效的排序算法,如快速排序或归并排序。

参考:https://blog.csdn.net/qq_45019143/article/details/109961460

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-11-23 01:02

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表