黑马程序员--冒泡排序法
2015-06-10 16:42
381 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一.冒泡排序:
冒泡排序的的优点是好理解,稳定,再就是空间复杂度低,不需要额外开辟数组元素的临时保存控件,当然了,编写起来也容易。其算法很简单,就是比较数组相邻的两个值,把大的像泡泡一样“冒”到数组后面去,一共要执行N的平方除以2这么多次的比较和交换的操作(N为数组元素),其复杂度为Ο(n²),如图:
冒泡排序是非常容易理解和实现,,以从小到大排序举例:
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成
[cpp] view
plaincopy
main()
{
int a[5];
int i;
int j;
int k;
int temp;
for(k=0;k<5;k++)
scanf("%d",&a[k]);
for (i=0;i<5;i++)
for (j=0;j<5-i;j++)
{
if (a[j]>a[j+1])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
for (i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
二.选择排序:
自己能够想得出来的排序法,思路很简单,用打擂台的方式,找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1 个到第N-1 个元素中最大的一个,和第N-1 个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法要少,因此性能是比冒泡法优秀的。看图:
[cpp] view
plaincopy
void select_sort(int a[],int len)
{
int i,j,x,l;
for(i=0;i<len;i++)
{
x=a[i];
l=i;
for(j=i;j<len;j++)
{
if(a[j]<x)
{
x=a[j];
l=j;
}
}
a[l]=a[i];
a[i]=x;
}
}
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
一.冒泡排序:
冒泡排序的的优点是好理解,稳定,再就是空间复杂度低,不需要额外开辟数组元素的临时保存控件,当然了,编写起来也容易。其算法很简单,就是比较数组相邻的两个值,把大的像泡泡一样“冒”到数组后面去,一共要执行N的平方除以2这么多次的比较和交换的操作(N为数组元素),其复杂度为Ο(n²),如图:
冒泡排序是非常容易理解和实现,,以从小到大排序举例:
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成
[cpp] view
plaincopy
main()
{
int a[5];
int i;
int j;
int k;
int temp;
for(k=0;k<5;k++)
scanf("%d",&a[k]);
for (i=0;i<5;i++)
for (j=0;j<5-i;j++)
{
if (a[j]>a[j+1])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
for (i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
二.选择排序:
自己能够想得出来的排序法,思路很简单,用打擂台的方式,找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1 个到第N-1 个元素中最大的一个,和第N-1 个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法要少,因此性能是比冒泡法优秀的。看图:
[cpp] view
plaincopy
void select_sort(int a[],int len)
{
int i,j,x,l;
for(i=0;i<len;i++)
{
x=a[i];
l=i;
for(j=i;j<len;j++)
{
if(a[j]<x)
{
x=a[j];
l=j;
}
}
a[l]=a[i];
a[i]=x;
}
}
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
相关文章推荐
- 程序员如何写出一份好的文档?
- 如何从菜鸟程序员成长为高手
- 轻松一刻,程序员的那些段子
- Java 面试题
- 黑马程序员——java基础——单例设计模式
- 数据分析师面试题攻略
- 程序员养生--治脚
- 面试-----公司和学生之间一道巨大的鸿沟
- 漫画:为什么不能打断程序员?
- 黑马程序员——Java概述
- 认清技术驱动力,确定职业方向
- Android面试、开发之高手 编码规范与细节
- 黑马程序员——Java基础---IO流(字节流)
- 从程序员到CTO所要培养的六种能力
- 黑马程序员 - 技术 blog16 之 java设计模式 by 八戒
- 程序员练级之路 (作者:陈皓)
- 黑马程序员——Java面向对象(一)之匿名对象、代码块、static关键字等
- 找工作笔试面试知识面
- 黑马程序员——泛型,Map集合
- 老码农教你学英语