您现在的位置是:首页 >学无止境 >C语言实现冒泡排序(附带源码)网站首页学无止境

C语言实现冒泡排序(附带源码)

Katie。 2025-03-24 12:01:02
简介C语言实现冒泡排序(附带源码)

C语言实现冒泡排序

项目介绍

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复遍历待排序的序列,比较相邻元素,如果它们的顺序错误就交换它们的位置。遍历过程每一轮都将当前未排序部分的最大元素“冒泡”到序列的末端,因此得名“冒泡排序”。这种排序算法简单易懂,但在大量数据时效率较低,时间复杂度为O(n²),适合于小规模的数据排序。

本项目的目标是使用C语言实现冒泡排序,提供一个简单的示例代码,展示如何进行冒泡排序操作,包括数组的初始化、排序和结果输出。

冒泡排序的基本思想
  1. 从头到尾遍历数组,比较相邻的两个元素。
  2. 交换位置:如果前一个元素大于后一个元素,就交换它们的位置。
  3. 重复遍历:每次遍历都会将当前未排序部分的最大元素移动到末尾。
  4. 优化:如果某一轮遍历没有发生交换,说明数组已经是有序的,可以提前终止排序。
项目实现思路
  1. 外层循环:遍历数组n-1次,每次都将未排序部分的最大元素移动到数组末尾。
  2. 内层循环:从数组的头部开始,比较相邻的元素,如果前一个元素大于后一个元素,则交换它们的位置。
  3. 提前退出优化:如果某次遍历中没有交换任何元素,说明数组已经有序,可以提前结束排序。
代码结构
  • bubbleSort:实现冒泡排序算法。
  • printArray:打印数组的内容,用于显示排序前后的结果。
  • main:主函数,用于输入数据并调用排序函数。
代码实现
#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    int i, j, temp;
    int swapped;  // 用来检测一轮遍历是否发生了交换
    
    // 外层循环,控制排序的轮数
    for (i = 0; i < n - 1; i++) {
        swapped = 0;  // 假设当前一轮没有发生交换
        
        // 内层循环,进行相邻元素的比较和交换
        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;
                
                swapped = 1;  // 如果发生了交换,设置swapped为1
            }
        }

        // 如果一轮遍历没有发生交换,说明数组已排好序,可以提前退出
        if (!swapped) {
            break;
        }
    }
}

// 打印数组的函数
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("
");
}

// 主函数,测试冒泡排序
int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);  // 计算数组的长度

    printf("排序前的数组: 
");
    printArray(arr, n);  // 打印排序前的数组

    bubbleSort(arr, n);  // 调用冒泡排序函数

    printf("排序后的数组: 
");
    printArray(arr, n);  // 打印排序后的数组

    return 0;
}
代码解读
  1. bubbleSort函数:

    • 输入参数:一个整数数组arr和数组的大小n
    • 外层循环:遍历n-1次,保证所有元素都能被排序。
    • 内层循环:从数组的第一个元素开始,比较相邻的两个元素。如果前一个元素大于后一个元素,就交换它们的位置。每次内层循环结束时,当前未排序部分的最大元素会被“冒泡”到数组的末尾。
    • 提前退出优化:如果在某一轮遍历中没有发生交换,说明数组已经有序,直接跳出外层循环,避免不必要的遍历。
  2. printArray函数:

    • 遍历数组并打印每个元素,输出数组的内容。
  3. main函数:

    • 定义一个示例数组arr,计算数组的大小,并在排序前后分别调用printArray函数打印数组。
    • 调用bubbleSort函数对数组进行排序。
示例输出

排序前的数组: 
64 34 25 12 22 11 90 
排序后的数组: 
11 12 22 25 34 64 90 
 

项目总结

本项目实现了一个简单的冒泡排序算法,能够将一个整数数组按升序排列。冒泡排序的时间复杂度为O(n²),因此它在面对较大数据集时效率较低。但是由于其简单易懂,仍然在小数据量的排序中广泛使用。

通过实现冒泡排序,我们深入理解了排序算法的基本思想和算法的优化策略——提前退出。当数组已经是有序的时,可以避免不必要的排序操作,从而提高算法的性能。虽然冒泡排序在大规模数据排序中效率较差,但它仍然是学习其他复杂排序算法的基础。

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。