冒泡排序的实现
2016-01-27 13:24
309 查看
/* 作者:秦时小 专业:计算机科学与技术 学校:咸阳师范学院 2013级 时间:2016.01.27 程序名称:冒泡排序算法实现 程序功能: */ #include <stdio.h> #include <stdbool.h> /* 函数名称:冒泡排序 参数说明: begin是待排序列的起始地址,end是待排序列最后一个元素的下一地址。 即end刚好且已经越界。compare函数指针。指定排序顺序是升序还是降序 函数说明: 为了避免当待排序列已经有序而程序做无用功浪费时间,在程序里设置了 flag变量,当检测到某一趟没有进行交换数据时,说明已经有序,则不再 进行循环。这样程序最少只执行一次。 */ void bubbleSort(int* begin,int* end,bool (*compare)(int,int)) { bool flag=false; //外循环表示比较的趟数,n个数最大需要执行n-1趟 for(int i=0;i<(end-begin)-1&&!flag;i++) { //在每趟循环开始时都把flag置为true,如果flag被改为false, //则说明未排好序,程序继续。 flag=true; //内循环控制每一趟相邻两个数的比较,每趟选出一个最大或者最小的数 //放在最后,下一趟则不会再比较最后这个数,因为循环的上线在减少 //j<(end-begin)-i-1; for(int j=0;j<(end-begin)-i-1;j++) { if(!compare(*(begin+j),*(begin+j+1))) { flag=false;//表示未排好序 int temp=*(begin+j); *(begin+j)=*(begin+j+1); *(begin+j+1)=temp; } } printf("第%d趟\n",i+1); } } //从小到大 bool compareASC(int num1,int num2) { return num1<num2; } //从大到小 bool compareDESC(int num1,int num2) { return num1>num2; } int main(void) { int arr[]={9,4,7,3,1,5,6,2,8,}; bubbleSort(arr,arr+9,compareASC);//从小到大 //bubbleSort(arr,arr+9,compareDESC);//从大到小 for(int i=0;i<9;i++) { printf("%d ",arr[i]); } printf("\n"); return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 冒泡排序
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解