小工具知识网

当前位置: 首页 > 行业知识 > 【排序算法】冒泡排序(C语言)

行业知识

【排序算法】冒泡排序(C语言)

2026-11-09 13:29:43 来源:互联网转载

【���序算法】—— 冒泡排序

目录

  • 一、冒泡排序的原理
  • 二、代码实现
  • 三、代码的优化
  • 四、冒泡排序的效率
  • 五、模仿库函数的qsort实现
    • 1. 相关接口
    • 2. 代码实现

      一、冒泡排序的原理

      ​ 冒泡排序法:(Bubble sort)是一种基础的交换排序,非常简单,一学就懂

      ​ 对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成

      1. 第一趟对0~n-1遍历,依次对比前后的大小,若是不满足前小后大就交换,此时最大的数就被挪到了最后一个位置
      1. 对0~n-2遍历,继续比较前后大小,此时前n-2个数中最大的数就到了倒数第二个位置
      1. 重复上述动作继续遍历,每一次都将最大的数向后挤,直到遍历完毕排序成功

      二、代码实现

      ​ int类型数组的升序排序的简单实现

      void bubble_sort(int* arr, int length){    int i = 0;    for (i=0; i        int j = 0;        for (j=0; j            if (arr[j]  arr[j+1])//顺序不对的交换位置            {                int temp = arr[j];                arr[j] = arr[j+1];                arr[j+1] = temp;            }        }    }}    int i = 0;    for (i=0; i        int flag = 0;   //flag标识        int j = 0;        for (j=0; j            if (arr[j]  arr[j+1])            {                int temp = arr[j];                arr[j] = arr[j+1];                arr[j+1] = temp;                flag = 1;//发生数据交换,置flag为1            }        }        if (flag == 0)//若flag为0,则没有发生交换,跳出循环        {            break;        }    }}    return *(int*)e1 - *(int*)e2;}//int类型数据比较(降序)int cmp(const void* e1, const void* e2){    return *(int*)e2 - *(int*)e1;//降序就是把e1,e2的位置交换一下}//字符串比较(按字母升序)#include     return strcmp((char*)e1, (char*)e2);//其实有点多余,直接把strcmp传入bubble_sort中就行了}    assert(e1!=NULL && e1!=NULL && size0);//断言判断各个参数的合法性        int i = 0;    for (i=0; i        char temp = *((char*)e1 + i);        *((char*)e1 + i) = *((char*)e2 + i);        *((char*)e2 + i) = temp;    }}//冒泡排序法void bubble_sort(const void* base, const int length, const int size, int (*cmp)(const void* e1, const void* e2)){    assert(base!=NULL && length0 && size0 && cmp!=NULL);//断言判断各个参数的合法性        int i = 0;    for (i=0; i        int flag = 0;        int j = 0;        for (j=0; j            if (cmp((char*)base + j*size, (char*)base + (j+1)*size) 

上一篇:怎么解决服务器上传失败?

下一篇:混乱服务器怎么玩的快?