排序算法入门之冒泡排序优化

转载 2016年09月12日 18:05:45

这篇文章是对上一篇文章中的冒泡排序进行优化

先来说说,冒泡排序哪些地方需要优化:

根据上一篇文章的内容,可以知道冒泡排序的核心是两两对比进行交换。如果有一个无序数列(2,1,3,4,5,6,7,8,9,10)

按照上一篇文章的代码,从第一次循环交换后的操作,可以说都是没必要的。所以,这些操作就是我们需要优化的地方。

那么如何优化?

通过观察可以看到,造成没必要的操作主要原因是后面8个数的顺序都已经是有序。所以,我们可以通过设置一个标记变量,标记数列中的数是否在循环结束前就已经排好序

代码:

  1. #include <stdio.h>  
  2. void swap(int *a, int *b);  
  3. int main()  
  4. {  
  5.     int    array[10] = {2, 1, 3, 4, 5, 6, 7, 8, 9, 10};  
  6.     int    i, j;  
  7.     int    flag = 1;   //设置标记变量  
  8.     for (i = 0; i < 10 && flag; i++)  
  9.     {  
  10.         flag = 0;      //只要flag在下一次外循环条件检测的时候值为0,就说明已经排好序,不用继续循环  
  11.         for (j = 9; j > i; j--)  
  12.         {  
  13.             if (array[j] < array[j-1])  
  14.             {  
  15.                 swap(&array[j], &array[j-1]);  
  16.                 flag = 1;   //如果有交换,就将标记变量赋1  
  17.             }  
  18.         }  
  19.     }  
  20.   
  21.     for (i = 0; i < 10; i++)  
  22.     {  
  23.         printf("%d\n", array[i]);  
  24.     }  
  25.     return    0;  
  26. }  
  27. void swap(int *a, int *b)  
  28. {  
  29.     int    temp;  
  30.     temp = *a;  
  31.       *a = *b;  
  32.       *b = temp;  
  33. }  
根据优化过的代码,当最好情况的时候,冒泡排序的时间复杂度是O(n)

排序1——冒泡排序及优化

冒泡排序及其优化
  • m0_37105443
  • m0_37105443
  • 2017年06月24日 17:03
  • 139

基本的排序算法之—— 冒泡排序(稳定)(对于固定的内存空间数组或顺序表,对于单链表也可以)

/********************************************************************** * Copyright (c)2015,WK Stu...
  • kai8wei
  • kai8wei
  • 2015年04月18日 23:51
  • 814

Facebook安卓Feed流的内存优化实践

引言大量的用户每天在Android设备上使用Facebook,滚动新闻Feed流页面,包括个人资料,活动,页面和组,与他们关心的人员和信息进行互动等一系列行为。 所有这些不同的Feed类型都由Andr...
  • u010321471
  • u010321471
  • 2017年06月20日 00:38
  • 3073

程序优化

一、 序言 程序优化是指利用软件开发工具对程序进行调整和改进,让程序充分利用资源,提高运行效率,缩减代码尺寸的过程。按照优化的侧重点不同,程序优化可分为运行速度优化和代码尺寸优化。 运行速...
  • u010651072
  • u010651072
  • 2016年01月17日 18:29
  • 2304

冒泡排序算法及其优化

冒泡排序 1、介绍: 冒泡排序和选择排序的思想是蛮力法,冒泡,顾名思义,每次选择后面一个元素(最大或者最小)冒上来,从而得到一个有序的序列。比如对于序列:10、8、5、7、3、1的冒泡第一趟演示图示...
  • diaoaa
  • diaoaa
  • 2014年03月29日 13:20
  • 3205

冒泡排序算法及其两种优化

冒泡排序算法及其两种优化 1、排序方法      将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R...
  • yanxiaolx
  • yanxiaolx
  • 2016年06月09日 18:08
  • 8566

【6】-BAT面试之操作系统内存详解

本文主要参考两篇博客,读后整理出来,以供大家阅读,链接如下:http://blog.jobbole.com/95499/?hmsr=toutiao.io&utm_medium=toutiao.io&u...
  • u010321471
  • u010321471
  • 2016年04月25日 23:13
  • 10274

冒泡排序

What?             冒泡排序(Bubble Sort):排序方法的思想就像他的名称,像泡泡一样冒上来。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误,就把他们交换过...
  • u010196821
  • u010196821
  • 2015年06月05日 22:51
  • 614

冒泡排序算法的两种优化

冒泡排序(三种实现,两种优化) /* 首先,我们先介绍BubbleSort; 就是冒泡排序,冒泡排序大家应该最熟悉不过了; 冒泡排序算法的运作如下:(从后往前) 1. 比较相邻的元素。如果第一...
  • bitboss
  • bitboss
  • 2016年06月01日 21:22
  • 2916

算法代码实现之冒泡排序,Java实现

两种类似的方式: /** * 冒泡排序 * @author roc */ public class BubbleSort { //交换数组元素 private static ...
  • QQ245671051
  • QQ245671051
  • 2016年02月27日 20:45
  • 846
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法入门之冒泡排序优化
举报原因:
原因补充:

(最多只允许输入30个字)