C语言中冒泡排序及优化
为什么80%的码农都做不了架构师?>>>
/** 指针指向调换,也是内容调换 */
void swap(int *a,int *b)
{
// int tmp;
// tmp = *a;
// *a = *b;
// *b = tmp;*a = *a^*b;*b = *b^*a;*a = *a^*b;
}
这是调换两个直的方法。
举个例子解释下先,其实写完我还是有点绕晕。
假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:
a=a∧b;
b=b∧a;
a=a∧b;
可以用下面的竖式来说明:
即等效于以下两步:
① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b。b∧b的结果为0,因为同一个数与本身相∧,结果必为0。因此b的值等于a∧0,即a,其值为3。
② 再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。
a得到b原来的值。
// 去除了没有必要的循环
void bubble_sort(int *a,int n)
{int flag = 1; // 控制外部循环的int k = n; // 外部循环的次数,开始等于数组的总数while(flag){flag = 0; // 等于外部零循环结束for(int i=1;i<k;i++){if(a[i-1]>a[i]) // 有与排序冲突的顺序{swap(&a[i-1],&a[i]); // 进行位置调换flag = 1; // 检查到这次循环有位置冲突,继续进行外部循环检查}}k--; // 完成了一个数据的位置调换}
}
void bubble_sort_other(int *a,int n)
{for(int i=0;i<n;i++)for(int j = 1;j<n-i;j++){if(a[j-1]>a[j]){a[j-1] = a[j-1]^a[j];a[j] = a[j]^a[j-1];a[j-1] = a[j-1]^a[j];}}
}
bubble_sort_other是一般人都可以写出来的
bubble_sort是进行优化了的。
用下试试
int main(int argc, const char * argv[]){int a[10]={3,2,4,5,6,7,8,9,24,13};bubble_sort(a,10);for (int i = 0; i < 10; i++) {printf("%d\n",a[i]);}return 0;
}
结果:
2
3
4
5
6
7
8
9
13
24
转载于:https://my.oschina.net/sttman/blog/686953
C语言中冒泡排序及优化相关推荐
- c语言排序教学过程,C语言中冒泡排序算法教学设计
排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...
- c语言冒泡排序的两种实现方式,c语言中冒泡排序的实现原理是什么?
满意答案 jmytwdipp 推荐于 2017.10.08 采纳率:54% 等级:11 已帮助:9051人 冒泡排序,就是对一组数进行逐趟排序的方法,具体分为升序和降序. 以升序为例. 每一趟的 ...
- c语言中冒泡排序、插入排序、选择排序算法比较
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比 ...
- C语言案例教学设计论文,【教学设计论文】C语言中冒泡排序算法教学设计(共2525字)...
排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...
- c 冒泡排序_C语言中选择排序和冒泡排序
点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来源:https://blog.csdn.net/zjy18886018024/cate ...
- 【无标题】7-11 sdut-C语言实验- 数列有序! 7-12 sdut-C语言实验- 中位数 7-13 sdut-C语言实验-各位数字之和排序 7-14 sdut-C语言实验- 冒泡排序中数据交换
7-11 sdut-C语言实验- 数列有序! 分数 14 全屏浏览题目 切换布局 作者 马新娟 单位 山东理工大学 有n(n<=100)个整数,已经按照从大到小顺序排列好,现在另外给一个整数m, ...
- 7-223 sdut-C语言实验-求阶乘(循环结构)7-224 sdut-C语言实验-排序问题7-225 sdut-C语言实验- 冒泡排序中数据交换的次数
目录 7-223 sdut-C语言实验-求阶乘(循环结构) 7-224 sdut-C语言实验-排序问题 7-225 sdut-C语言实验- 冒泡排序中数据交换的次数 7-223 sdut-C语言实验- ...
- C语言的冒泡排序优化及鸡尾酒排序问题分解知识点
关于C语言的冒泡排序优化及鸡尾酒排序 /*对于冒泡排序的公式分享,其实只要把公式背下来就行,没有什么大碍,本人新手,大一新生, 对于排序的算法,我第一个接触的排序算法就是冒泡排序,下面我就简单给一个例 ...
- C语言中的优化技巧总结
1.选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多.数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组 ...
最新文章
- MSN Cartoon 试用
- CPU_X86架构和ARM架构入门篇
- UNITY把3D模型显示在UI层级上的思路
- hdu 5521 Meeting(最短路)
- Vue基本使用---vue工作笔记0002
- [R时间序列]ARMA模型如何分辨拖尾与截尾
- 一起来当网管(一)——Windows Server上的DHCP配置
- 《Java并发编程实践》学习笔记之二:线程安全性(thread-safe)
- Postgresql中存储过程(函数)调用存储过程(函数)时应用注意的问题
- 二、npm scripts
- 浅析近场通信技术特点及未来可能的应用与发展
- 电阻中联分压电路的计算
- Facebook:Novi数字钱包“已经准备好进入市场”
- 深圳python培训学习班
- 如何使用企业微信工作台快速寄件?
- WideBaselineFeatureMatcher_PAMI
- 多元函数条件极值的求法 拉格朗日乘数法
- 计算机cpu的字母,买电脑如何识别CPU后面数字和字母的含义?不被忽悠呢?
- 中国石油大学《红楼梦研究》第二阶段在线作业
- 前端进击的巨人(二):栈、堆、队列、内存空间
热门文章
- C++11 新增关键字decltype学习
- 反汇编基础、OllyDbg简介和界面、基本操作、初级TraceMe练习
- css继承和边框圆角 及 写三角形
- unittest框架(三)unittest+yaml数据驱动
- C# web api 中过滤器的使用
- bzoj 2251: [2010Beijing Wc]外星联络
- Storm具体的解释(二)、成为第一Storm申请书
- 在Android上使用Socket
- extjs 重设autoHeight
- python绘图模块pandas_python绘图:matplotlib和pandas的应用