打印

算法-排序之冒泡排序

[复制链接]
1218|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 kfliuyan 于 2014-4-22 13:32 编辑

如果数据按照一定的顺序进行排序,数据处理的效率将显著的提高。算法是编程的精髓,一个高效而合适的算法能极大的减少时间消耗与空间消耗,提到“合适”是因为没有哪个算法可以在所有情况下都表现出色,同样是排序,在不同数据规模下各种排序算法有不同的效能表现,选择合适的解决算法的才能最大限度地提高效率。

相关帖子

沙发
kfliuyan|  楼主 | 2014-4-22 11:03 | 只看该作者
本帖最后由 kfliuyan 于 2014-4-22 13:32 编辑

1.冒泡算法BubbleSort是常用排序算法之一,它的核心是让大(或小)的数据像水泡一样冒到最上端,这是通过不断地比较两个相邻数据的大小,前者大于后者则交换位置来实现冒泡。

使用特权

评论回复
板凳
kfliuyan|  楼主 | 2014-4-22 11:05 | 只看该作者
本帖最后由 kfliuyan 于 2014-4-22 13:34 编辑

使用特权

评论回复
地板
kfliuyan|  楼主 | 2014-4-22 11:06 | 只看该作者
本帖最后由 kfliuyan 于 2014-4-22 13:34 编辑

需要注意的细节是,对于n个数据,只需要排n-1次,故控制排序遍数的i起始值为1而不是0.在每次排序中,上次排好的数不需要再进行比较,故控制每次排序结束位置变了j的上限是num-i,随着排序次数i增加,需要排序的位置越靠前。

使用特权

评论回复
5
kfliuyan|  楼主 | 2014-4-22 11:07 | 只看该作者
本帖最后由 kfliuyan 于 2014-4-22 13:41 编辑
void BubbleSort(int Array[],int num){
int i; //i控制排序的遍数
int j; //j控制每次排序结束的位置
int temp;
for(i=0;i<num;i++){
for(j=1;j<num-i;j++){
if(Array[j-1]>Array[j]){
temp=Array[j-1];
Array[j-1]=Array[j];
Array[j]=temp;
}
}
}
}

使用特权

评论回复
6
kfliuyan|  楼主 | 2014-4-22 11:08 | 只看该作者
本帖最后由 kfliuyan 于 2014-4-22 13:42 编辑

2. 时间复杂度
           冒泡排序的主要时间消耗是比较,第一趟序比较n-1次,随后依次递减n-2....1,则总比较(n-1)+(n-2)+...+3+2+1=(n*2-n)/2,故其时间复杂度为O(n^2).

使用特权

评论回复
7
kfliuyan|  楼主 | 2014-4-22 13:43 | 只看该作者
3.空间复杂度
           整个排序过程需要一个temp的空间用于交换数据,故为空间复杂度为O(1).

使用特权

评论回复
8
firstblood| | 2014-4-22 19:28 | 只看该作者
kfliuyan 发表于 2014-4-22 11:05

冒泡排序是非常基本的算法的,在处理数据的时候非常管用的

使用特权

评论回复
9
firstblood| | 2014-4-22 19:29 | 只看该作者
冒泡排序的有冒大冒小的区别的,不过都是将数据排序的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

793

帖子

1

粉丝