Logo
开发文档
QQ频道

写一个 C 语言冒泡排序

2025-04-03 14:22:08
|
浏览 26

好的,下面是一个关于如何在C语言中实现冒泡排序的详细教程:

什么是冒泡排序?

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

冒泡排序的基本原理:

  1. 比较相邻的元素:如果第一个比第二个大(升序),就交换它们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

C语言实现冒泡排序:

下面是一个用C语言实现的简单冒泡排序算法:

复制代码
#include <stdio.h>

// 函数声明
void bubbleSort(int arr[], int n);

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    
    bubbleSort(arr, n);
    printf("排序后的数组: \n");
    for (int i=0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

// 冒泡排序实现
void bubbleSort(int arr[], int n) {
    int temp;
    for (int i = 0; i < n-1; i++) {
        // 最后i个元素已经是有序的,所以只需要遍历到n-i-1
        for (int 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;
            }
        }
    }
}

代码解释:

  • main() 函数中,我们定义了一个整数数组并计算其长度。然后调用 bubbleSort 函数对数组进行排序,最后打印排序后的数组。
  • bubbleSort(int arr[], int n) 函数实现了冒泡排序的主要逻辑:通过嵌套的 for 循环来比较和交换元素,直到整个数组有序。

优化:

虽然这个基本的冒泡排序算法可以正确地对数组进行排序,但是它的效率并不高(特别是对于大规模数据),因为它不关心数据的初始状态,总是需要完整的遍历和比较。为了提高性能,可以在某些情况下提前结束排序过程,如果发现某一轮没有发生任何交换操作,则说明列表已经有序,可以提前退出循环。

复制代码
void bubbleSortOptimized(int arr[], int n) {
    int temp;
    for (int i = 0; i < n-1; i++) {
        bool swapped = false; // 标志变量用于检测是否发生交换
        for (int 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;
                swapped = true; // 发生了交换,设置标志变量为true
            }
        }
        if (!swapped) break; // 如果没有发生交换,提前退出循环
    }
}

这个优化版本会在没有发生交换时立即结束排序过程,从而提高性能。

我要提问
复制内容
分享给好友
AI编程问答网 免责声明:
以上内容除特别注明外均来源于网友提问,AI编程问答网回答,权益归原著者所有;