• C语言的冒泡排序


    排序的分类

    • 内部排序:将需要处理的所有数据都加载到内部存储器(内存)中进行排序
    • 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序

    冒泡排序

            通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。

    冒泡排序的过程

    •  在第一轮排序过程中,数组中,从下标0开始,只要发现前面的数大于后面的数就交换。而下标最大值就是arrLen-1
    1. for (j = 0; j < arrLen-1; j++) {
    2. //如果前边的数大于后面的数,就交换
    3. if (arr[j] > arr[j + 1]) {
    4. t = arr[j];
    5. arr[j] = arr[j + 1];
    6. arr[j + 1] = t;
    7. }
    8. }
    • 冒泡排序每一轮冒出一个最值,整个排序过程需要的轮数为arrLen-1轮,初始化局部变量从0开始,为了增强程序的可读性
    for (i = 0; i < arrLen-1; i++)
    • 则两者相结合,可以完整对数组进行排序
    1. void bubbleSort(int arr[],int arrLen) {
    2. //排序
    3. int j,i;
    4. int t;//临时变量
    5. //int arrLen = sizeof(arr) / sizeof(int);//zizeof函数在自定义方法中不能用
    6. for (i = 0; i < arrLen-1; i++) {//需要几轮排序
    7. for (j = 0; j < arrLen-1-i; j++) {
    8. //如果前边的数大于后面的数,就交换
    9. if (arr[j] > arr[j + 1]) {
    10. t = arr[j];
    11. arr[j] = arr[j + 1];
    12. arr[j + 1] = t;
    13. }
    14. }
    15. }
    16. }
    • 数组的遍历
    1. //输出排序后的情况
    2. for (j = 0; j < arrLen; j++) {
    3. printf("%d ", arr[j]);
    4. }
    • sizeof()函数只能在main()函数中使用
    1. void main() {
    2. int arr[] = { 3,-5,85,-2,-30,89,0,59 };
    3. int arrLen = sizeof(arr) / sizeof(int);
    4. int j;
    5. bubbleSort(arr,arrLen);//数组默认是地址传递(指针)
    6. //输出排序后的情况
    7. for (j = 0; j < arrLen; j++) {
    8. printf("%d ", arr[j]);
    9. }
    10. printf("\n");
    11. getchar();
    12. }

    冒泡排序的完整代码

    1. #include
    2. //冒泡排序
    3. void bubbleSort(int arr[],int arrLen) {
    4. //排序
    5. int j,i;
    6. int t;//临时变量
    7. //int arrLen = sizeof(arr) / sizeof(int);//zizeof函数在自定义方法中不能用
    8. for (i = 0; i < arrLen-1; i++) {//需要几轮排序
    9. for (j = 0; j < arrLen-1-i; j++) {
    10. //如果前边的数大于后面的数,就交换
    11. if (arr[j] > arr[j + 1]) {
    12. t = arr[j];
    13. arr[j] = arr[j + 1];
    14. arr[j + 1] = t;
    15. }
    16. }
    17. }
    18. }
    19. void main() {
    20. int arr[] = { 3,-5,85,-2,-30,89,0,59 };
    21. int arrLen = sizeof(arr) / sizeof(int);
    22. int j;
    23. bubbleSort(arr,arrLen);//数组默认是地址传递(指针)
    24. //输出排序后的情况
    25. for (j = 0; j < arrLen; j++) {
    26. printf("%d ", arr[j]);
    27. }
    28. printf("\n");
    29. getchar();
    30. }
  • 相关阅读:
    【设计模式】单例模式
    websocket
    性能测试jmeter连接数据库jdbc(sql server举例)
    Arduino开发实例-DIY风速测量及显示
    springboot整合mybatisplus,JPA,swagger2配置postgresql,clickhouse双数据源项目
    基于springboot的房产销售系统
    CentOS 7.9 编译安装 nbd 模块
    1159 Structure of a Binary Tree 甲级 xp_xht123
    算法学习-记忆化搜索(持续更新中)
    在Windows环境下,使用VS2013配置FFmpeg+OpenCV开发环境
  • 原文地址:https://blog.csdn.net/qq_47896523/article/details/126348007