| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1172 人关注过本帖
标题:[求助]如何实现快速冒泡?
只看楼主 加入收藏
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
哦,楼上说的是冒泡的优化版本
2007-08-17 00:24
Maltase
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2007-8-7
收藏
得分:0 
恩。。是的。。。但我不知道该怎么来实现。。。。望各位指点指点,谢谢

读书....努力读书.....
2007-08-17 01:16
ConZhang
Rank: 1
来 自:北京
等 级:新手上路
帖 子:282
专家分:0
注 册:2007-8-7
收藏
得分:0 
我到听说过双向冒泡!
2007-08-17 08:39
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
那个很简单啊,在内层循环外定义一个标记,置0,
内层循环如果发生交换就置1
出了循环就检查标记是不是0,是0就结束冒泡
2007-08-17 08:54
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
快速冒泡应该就是快速排序,因为快速排序实质就是从冒泡演变过来的优化版

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-17 09:38
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
以下是引用卧龙孔明在2007-8-17 9:38:54的发言:
快速冒泡应该就是快速排序,因为快速排序实质就是从冒泡演变过来的优化版

演变归演变,名字本身就是为了区分不同的算法
快速冒泡,不会与qsort等价,难道你说聪明的猴子就是人?

2007-08-17 09:47
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
收藏
得分:0 

如果你问如何进行“冒泡法排序”,代码如下:
#include <stdio.h>
#define N 5
void main()
{
int a[N] = {7, 5, 6, 2, 3}; //升序
int i, j, t;
for(i = 0; i < N-1; i++) //进行N-1趟比较
for(j = 0; j < N-1-i; j++) //每一趟进行N-1-i次比较,使每一趟比较都使最大的数“沉底”
{
if(a[j] > a[j+1]) //交换相邻的数
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i = 0; i < N; i++)
printf("%d ",a[i]);
printf("\n");
}

[此贴子已经被作者于2007-8-17 11:29:03编辑过]


2007-08-17 11:25
Maltase
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2007-8-7
收藏
得分:0 
感谢楼上的,我研究研究,谢谢

读书....努力读书.....
2007-08-17 15:48
changjie
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-4-18
收藏
得分:0 

楼主的意思,是不是就是要 冒泡的优化版。
楼上兄弟的代码做了点改进, 思想是: 加一个标记, 如果内循一次过去,没有一次被交换说明己经排好序了,
所以之后就没有必要在循环下去。

我没有在机上调试,楼主自己动动手。反正思想就这么个思想,说法也就这么个说法。

#include <stdio.h>
#define N 5
void main()
{
int a[N] = {7, 5, 6, 2, 3};
int i, j, t;
bool flag=true;
for(i = 0; i < N-1,flag; i++) // 这里
{
flag=false; //这里
for(j = 0; j < N-1-i; j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
flag=true; //这里, 如果一次过去有交换就 记为 true
}
}
}

for(i = 0; i < N; i++)
printf("%d ",a[i]);
printf("\n");
}

2007-08-17 18:32
快速回复:[求助]如何实现快速冒泡?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020295 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved