冒泡排序法及其优化

原创 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冒泡排序及其优化

  • 2015年11月02日 16:58
  • 3KB
  • 下载

冒泡排序优化算法

  • 2013年11月26日 20:02
  • 2KB
  • 下载

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

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

经典冒泡排序优化

  • 2014年09月09日 17:23
  • 2KB
  • 下载

Java冒泡排序法2

  • 2013年06月17日 11:26
  • 473B
  • 下载

未优化的冒泡排序算法.c

#include #include #define MAX 12 int main(void) { int i, j; int array[MAX]; printf("\n**...

冒泡排序法

  • 2013年04月25日 21:12
  • 700B
  • 下载

冒泡排序法

  • 2014年10月27日 21:02
  • 12KB
  • 下载

Java算法实现之冒泡排序及优化

Java算法实现之冒泡排序及优化

C语言冒泡排序法的简单程序.doc

  • 2012年12月15日 19:29
  • 49KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:冒泡排序法及其优化
举报原因:
原因补充:

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