行业知识
【排序算法】冒泡排序(C语言)
2026-11-09 13:29:43
来源:互联网转载
【���序算法】—— 冒泡排序
目录
- 一、冒泡排序的原理
- 二、代码实现
- 三、代码的优化
- 四、冒泡排序的效率
- 五、模仿库函数的qsort实现
- 1. 相关接口
- 2. 代码实现
一、冒泡排序的原理
冒泡排序法:(Bubble sort)是一种基础的交换排序,非常简单,一学就懂
对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成
- 第一趟对0~n-1遍历,依次对比前后的大小,若是不满足前小后大就交换,此时最大的数就被挪到了最后一个位置
- 对0~n-2遍历,继续比较前后大小,此时前n-2个数中最大的数就到了倒数第二个位置
- 重复上述动作继续遍历,每一次都将最大的数向后挤,直到遍历完毕排序成功
二、代码实现
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)
上一篇:怎么解决服务器上传失败?
下一篇:混乱服务器怎么玩的快?