当前位置: 首页 > article >正文

排序算法--冒泡排序

 冒泡排序虽然简单,但在实际应用中效率较低,适合小规模数据或教学演示。

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) { // 外层循环控制排序轮数
        for (int j = 0; j < n - i - 1; j++) { // 内层循环控制每轮比较
            if (arr[j] > arr[j + 1]) { // 如果前一个元素大于后一个元素,交换它们
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
#include <stdio.h>
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90}; // 待排序数组
    int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度

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

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

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

    return 0;
}

优化建议

1)提前终止:如果某一轮没有发生交换,说明数组已有序,可以提前结束排序。

// 冒泡排序函数
void bubbleSortOptimized(int arr[], int n) {
    int swapped;
    for (int i = 0; i < n - 1; i++) {// 外层循环控制排序轮数
        swapped = 0;
        for (int j = 0; j < n - i - 1; j++) {// 内层循环控制每轮比较
            if (arr[j] > arr[j + 1]) {// 如果前一个元素大于后一个元素,交换它们
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = 1;
            }
        }
        if (!swapped) break; // 如果没有交换,提前结束
    }
}

 2)记录最后交换位置:记录每轮最后一次交换的位置,减少不必要的比较。


http://www.kler.cn/a/532687.html

相关文章:

  • Java牙科诊所管理系统web医院病例挂号预约平台springboot/ssm代码编写
  • 扩展域并查集 带权并查集
  • 86.(2)攻防世界 WEB PHP2
  • C++基础(2)
  • 手写MVVM框架-实现简单的数据代理
  • 18.[前端开发]Day18-王者荣耀项目实战(一)
  • 最新版Node.js下载安装指定版本图文版教程(非常详细)
  • 动态获取脚本名称作为日志文件的名称
  • 要将DsspSeek微调为行业专用的大模型,需要结合领域知识、数据优化和模型调整策略。
  • 【Linux系统】SIGCHLD 信号(选学了解)
  • 基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)
  • linux内核源代码中__init的作用?
  • 【仿12306项目】基于SpringCloud,使用Sentinal对抢票业务进行限流
  • Linux01——初识Linux
  • 【Python】NumPy(一):数据类型、创建数组及基本操作
  • Docker使用指南(二)——容器相关操作详解(实战案例教学,创建/使用/停止/删除)
  • 开发指南094-in语句的处理
  • Maven(Ⅱ):依赖范围,依赖传递,依赖阻断,可选依赖
  • 10分钟本地部署Deepseek-R1
  • Laravel Validation validated() 的实现
  • Selenium记录RPA初阶 - 基本输入元件
  • js --- 获取随机数
  • 预防和应对DDoS的方法
  • 【力扣】283.移动零
  • springboot后台系统开发(三)- 日志
  • 【OS】AUTOSAR架构下的Interrupt详解(上篇)