c语言冒泡排序

冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序的基本思路

冒泡排序的基本思路非常简单,即重复地走访过要排序的元素列,一次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来,这个过程会重复进行,直到没有相邻元素需要交换,也就是说该数列已经排序完成。

c语言冒泡排序
(图片来源网络,侵删)

算法实现步骤

1、比较相邻的元素,如果第一个比第二个大,就交换它们两个;

2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数;

3、针对所有的元素重复以上的步骤,除了最后一个;

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要交换,此时序列已经完全排序。

算法优缺点

优点

c语言冒泡排序
(图片来源网络,侵删)

易于理解与实现;

可以原地排序,不需要额外的大量存储空间。

缺点

效率较低,最坏情况下时间复杂度为O(n²),n为数组长度;

在数据量较大时不适用。

c语言冒泡排序
(图片来源网络,侵删)

代码实现

#include <stdio.h>
void bubble_sort(int arr[], int len) {
    int i, j, temp;
    for (i = 0; i < len 1; i++) {
        for (j = 0; j < len 1 i; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
int main() {
    int arr[] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70};
    int len = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, len);
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

优化技巧

1、标志位:使用一个标志位来跟踪每一趟排序中是否发生了交换,如果在某趟排序中没有发生任何交换,说明数组已经排序完成,可以直接跳出循环。

2、记录最后交换的位置:每趟排序都会使得最大(或最小)的元素“浮”到其最终位置,因此可以记录每趟排序中最后一次发生交换的位置,下一趟排序只需要到这个位置即可,减少不必要的比较。

冒泡排序虽然简单,但是效率不高,适用于小数据集或者基本有序的数据集,对于大数据集,一般推荐使用更高效的排序算法如快速排序、归并排序等。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/767455.html

(0)
未希的头像未希新媒体运营
上一篇 2024-07-10
下一篇 2024-07-10

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入