为什么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语言中冒泡排序及优化相关推荐

  1. c语言排序教学过程,C语言中冒泡排序算法教学设计

    排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...

  2. c语言冒泡排序的两种实现方式,c语言中冒泡排序的实现原理是什么?

    满意答案 jmytwdipp 推荐于 2017.10.08 采纳率:54%    等级:11 已帮助:9051人 冒泡排序,就是对一组数进行逐趟排序的方法,具体分为升序和降序. 以升序为例. 每一趟的 ...

  3. c语言中冒泡排序、插入排序、选择排序算法比较

           掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比 ...

  4. C语言案例教学设计论文,【教学设计论文】C语言中冒泡排序算法教学设计(共2525字)...

    排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...

  5. c 冒泡排序_C语言中选择排序和冒泡排序

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来源:https://blog.csdn.net/zjy18886018024/cate ...

  6. 【无标题】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. 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语言实验- ...

  8. C语言的冒泡排序优化及鸡尾酒排序问题分解知识点

    关于C语言的冒泡排序优化及鸡尾酒排序 /*对于冒泡排序的公式分享,其实只要把公式背下来就行,没有什么大碍,本人新手,大一新生, 对于排序的算法,我第一个接触的排序算法就是冒泡排序,下面我就简单给一个例 ...

  9. C语言中的优化技巧总结

    1.选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多.数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组 ...

最新文章

  1. MSN Cartoon 试用
  2. CPU_X86架构和ARM架构入门篇
  3. UNITY把3D模型显示在UI层级上的思路
  4. hdu 5521 Meeting(最短路)
  5. Vue基本使用---vue工作笔记0002
  6. [R时间序列]ARMA模型如何分辨拖尾与截尾
  7. 一起来当网管(一)——Windows Server上的DHCP配置
  8. 《Java并发编程实践》学习笔记之二:线程安全性(thread-safe)
  9. Postgresql中存储过程(函数)调用存储过程(函数)时应用注意的问题
  10. 二、npm scripts
  11. 浅析近场通信技术特点及未来可能的应用与发展
  12. 电阻中联分压电路的计算
  13. Facebook:Novi数字钱包“已经准备好进入市场”
  14. 深圳python培训学习班
  15. 如何使用企业微信工作台快速寄件?
  16. WideBaselineFeatureMatcher_PAMI
  17. 多元函数条件极值的求法 拉格朗日乘数法
  18. 计算机cpu的字母,买电脑如何识别CPU后面数字和字母的含义?不被忽悠呢?
  19. 中国石油大学《红楼梦研究》第二阶段在线作业
  20. 前端进击的巨人(二):栈、堆、队列、内存空间

热门文章

  1. C++11 新增关键字decltype学习
  2. 反汇编基础、OllyDbg简介和界面、基本操作、初级TraceMe练习
  3. css继承和边框圆角 及 写三角形
  4. unittest框架(三)unittest+yaml数据驱动
  5. C# web api 中过滤器的使用
  6. bzoj 2251: [2010Beijing Wc]外星联络
  7. Storm具体的解释(二)、成为第一Storm申请书
  8. 在Android上使用Socket
  9. extjs 重设autoHeight
  10. python绘图模块pandas_python绘图:matplotlib和pandas的应用