常见排序算法之冒泡排序

冒泡排序,英文名Bubble Sort,是一种相对基础的 交换排序方法。这种排序算法的名字来源于它操作的过程,可以类比为数列中的每一个元素都可以像小气泡一样,根据自身的大小一点一点向数组的一侧移动。具体到冒泡排序的工作原理,它是通过重复走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。这个过程会持续进行,直到没有再需要交换的情况出现,也就是说该数列已经排序完成。

void bubble_sort(int arr[], int n) 
{
    for (int i = 0; i < n - 1; i++) 
    {
        for (int j = 0; j < n - 1 - i; j++) 
        {
            if (arr[j] > arr[j + 1]) 
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

上述代码定义了一个名为 bubble_sort 的函数,它接受一个整数数组 arr 和数组的长度 n 作为参数。函数使用嵌套的两个for循环来实现冒泡排序算法。

外层循环从 0n-2,表示需要进行 n-1 轮比较和交换操作。内层循环从 0n-2-i,其中 i 是外层循环的索引。这是因为每一轮比较后,最大的元素都会被移动到正确的位置,所以内层循环不需要再比较已经排好序的元素。

在内层循环中,通过比较相邻的元素 arr[j]arr[j+1],如果前者大于后者,则交换它们的位置。这样,每一轮内层循环结束后,最大的元素就会被移动到正确的位置。整个排序过程会重复进行,直到所有的元素都被正确地排序。最后,函数不返回任何值,因为它直接修改了输入的数组 arr


int main() 
{
    int arr[] = {6, 3, 2, 1, 4, 5, 9};
    int n = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, n);
    printf("排序后的数组是:\n");
    for (int i = 0; i < n; i++) 
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

在此段代码中我们定义了一个arr数组,并且初始化了元素。++定义了一个整数n为数组的长度,通过sizeof()函数先计算整个数组的字节大小除以单个元素的字节大小得到。++ 接下来就是调用bubble_sort 函数,后续通过for循环依次遍历排序后的数组依次打印。

整体展示:


上述代码我们是提前定义好的数组元素,要是想要手动输入数组元素,循环套用scanf()函数即可,bubble_sort 函数不变,详细代码如下:

int main() 
{
    int n;
    printf("请输入数组元素个数: ");
    scanf("%d", &n);
    int arr[n];
    printf("请输入数组元素: ");
    for (int i = 0; i < n; i++) 
    {
        scanf("%d", &arr[i]);
    }
    bubble_sort(arr, n);
    printf("排序后的数组为: ");
    for (int i = 0; i < n; i++) 
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

整体展示:

由于我使用的编译环境不支持编译未知数组大小,所以我使用的是Dev C++环境给大家展示结果,大家在学习中可以自行研究练习。


**结语:**冒泡排序的分享到这里就结束了,希望对大家的学习会有帮助,如果大家有什么问题或者不同的见解,欢迎大家的留言~~~

相关推荐
独行soc11 小时前
#渗透测试#SRC漏洞挖掘#深入挖掘XSS漏洞02之测试流程
web安全·面试·渗透测试·xss·漏洞挖掘·1024程序员节
XuanRanDev14 小时前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
鹏大师运维20 小时前
【功能介绍】信创终端系统上各WPS版本的授权差异
linux·wps·授权·麒麟·国产操作系统·1024程序员节·统信uos
亦枫Leonlew21 小时前
微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
笔记·数学·微积分·1024程序员节
小肥象不是小飞象21 小时前
(六千字心得笔记)零基础C语言入门第八课——函数(上)
c语言·开发语言·笔记·1024程序员节
一个通信老学姐1 天前
专业130+总400+武汉理工大学855信号与系统考研经验电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节
力姆泰克1 天前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节
力姆泰克1 天前
力姆泰克电动缸助力农业机械装备,提高农机的自动化水平
大数据·服务器·数据库·人工智能·1024程序员节
程思扬1 天前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
转世成为计算机大神1 天前
网关 Spring Cloud Gateway
java·网络·spring boot·1024程序员节