冒泡排序法及其优化

原创 2017年01月03日 23:18:43
本文介绍的是冒泡排序法对数组进行排序
下面第一个源程序是谭浩强那本书上的冒泡排序法,它的时间时间复杂度是O(n2)


源程序:
#include <stdio.h>
int main()
{
int a[5]; //定义一个长度为5的数组
int i, j, t;
for (i=0; i<5; i++) //人为输入
{
scanf("%d", &a[i]);
}

for (i=0; i<4; i++)
{
for (j=0; j<4-i; j++)
{
if (a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("\n冒泡排序:\n");
for (i=0; i<5; i++)
{
printf("%d\n", a[i]);
}
return 0;
}

运行后的结果:




下面介绍一下优化后的程序,就是添加一个flag标志变量,检查是否在整个排序的过程中已经提前排序完全了。


源代码:
#include <stdio.h>
int main()
{
int a[5];
int i, j, t;
int flag=1;


for (i=0; i<5; i++)
{
scanf("%d", &a[i]);
}

for (i=0; i<4&&flag; i++)
{
flag = 0;
for (j=0; j<4-i; j++)
{
if (a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
flag = 1;
}
}
}
printf("\n冒泡排序:\n");
for (i=0; i<5; i++)
{
printf("%d\n", a[i]);
}
return 0;
}


运行后的结果:



总结:通过加上flag标志变量后,会使得算法更加的有效率。最好时的时间复杂度是O(n),而传统的冒泡排序则永远都是O(n2)的时间复杂度。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JAVA冒泡排序及其优化

经典冒泡排序优化

冒泡排序优化之鸡尾酒排序法

鸡尾酒排序法,又名双向冒泡排序法,算法传统冒泡法的一点改进。但是对于鸡尾酒排序,算法的时间复杂度与空间复杂度并没有改进。   不同的是排序的交换次数。某些情况下鸡尾酒排序比普通冒泡排序的交换次数少。...

冒泡排序优化算法

Java冒泡排序法2

  • 2013-06-17 11:26
  • 473B
  • 下载

冒泡排序及其优化

/** * 冒泡排序及其优化 * @author shuaicenglou * */ public class Maopao { public static void main(Str...

冒泡排序法

  • 2013-04-25 21:12
  • 700B
  • 下载

冒泡排序法

  • 2014-10-27 21:02
  • 12KB
  • 下载

冒泡排序的优化算法

/* *减少了冒泡排序外面的循环的次数,如果在第K项后没有产生交换, *则K项之后所有的项必定有序,如果k=0则说明整个数组都有序,则退出 */ int* sort(int a[],int le...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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