冒泡排序(C语言)

简介:本文用C语言实现冒泡排序。

code

#include <stdio.h>

void bubble_sort(int arr[], int n)
{
    int i, j, temp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (arr[j] > arr[j+1])
            {
                // 交换相邻元素的位置
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main()
{
    int arr[] = {5, 4, 3, 2, 1};
    int n = sizeof(arr) / sizeof(arr[0]);

    bubble_sort(arr, n);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

这个代码定义了一个bubble_sort()函数,接受一个整数数组和数组的长度作为输入,然后使用嵌套循环遍历数组,并比较相邻元素的大小,如果前一个元素大于后一个元素,则交换它们的位置,直到数组完全排序为止。

在main()函数中,我们定义了一个整数数组并使用bubble_sort()函数对它进行排序。最后,我们打印出排序后的数组。

注意,在实际应用中,冒泡排序可能不是最优的排序算法,因为它的时间复杂度为O(n^2),而更快的排序算法,如快速排序和归并排序,通常具有更好的性能。

分析

该代码首先包含了一个头文件stdio.h,这个头文件包含了printf()函数的声明。

接下来定义了一个名为bubble_sort的函数,它接受一个整数数组和数组的长度作为输入,并使用嵌套循环遍历数组,并比较相邻元素的大小,如果前一个元素大于后一个元素,则交换它们的位置,直到数组完全排序为止。

在main函数中,我们定义了一个整数数组arr,并使用sizeof运算符计算了数组的长度。然后,我们调用bubble_sort函数对数组进行排序。

最后,我们使用printf函数打印出排序后的数组。

需要注意的是,该代码存在以下缺陷:

没有对数组的长度进行验证,如果长度为0或1,冒泡排序不会进行排序,这将导致程序不必要的计算和时间浪费。
代码中只使用了一个简单的固定大小的数组进行排序,如果数组太大,可能会导致内存不足。因此,可能需要使用动态内存分配函数来动态创建数组,并在排序结束后释放内存。
冒泡排序时间复杂度为O(n^2),当输入规模非常大时,可能会变得非常缓慢。如果需要排序大规模数据,可以考虑使用更高效的排序算法,如快速排序、归并排序、堆排序等。

详细分析

以下是对上面C语言冒泡排序代码的详细分析:
1:头文件引用
#include <stdio.h>
这个头文件包含了标准输入/输出函数printf()的声明。
2:函数定义
void bubble_sort(int arr[], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j+1])
{
// 交换相邻元素的位置
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
这是一个名为bubble_sort的函数,接受一个整数数组和数组的长度作为输入,用冒泡排序算法对数组进行排序。具体实现:首先定义三个变量i、j和temp,分别表示两个循环变量和一个中间变量。第一个循环变量i从数组的第一个元素开始循环,一直到倒数第二个元素,第二个循环变量j也从数组的第一个元素开始循环,直到倒数第i+1个元素。内部的if语句判断当前元素与下一个元素的大小关系,如果前一个元素大于后一个元素,则交换它们的位置。每次循环结束后,最大的元素都会被移到了数组的末尾。直到i循环完所有元素,排序完成。
3:main函数
int main()
{
int arr[] = {5, 4, 3, 2, 1};
int n = sizeof(arr) / sizeof(arr[0]);

bubble_sort(arr, n);

printf("Sorted array: ");
for (int i = 0; i < n; i++)
{
    printf("%d ", arr[i]);
}
printf("\n");

return 0;

}
这是程序的主函数。首先定义一个整数数组arr,包含了5个元素,然后使用sizeof运算符计算了数组的长度。接着调用bubble_sort函数对数组进行排序。最后,使用printf函数打印出排序后的数组。
4:缺陷
该代码没有对数组的长度进行验证,如果长度为0或1,冒泡排序不会进行排序,这将导致程序不必要的计算和时间浪费。
代码中只使用了一个简单的固定大小的数组进行排序,如果数组太大,可能会导致内存不足。因此,可能需要使用动态内存分配函数来动态创建数组,并在排序结束后释放内存。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南侠客(上海)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值