冒泡排序最优化的方法?

oLinYi 2012-10-26 11:33:15
void sort(int b[],int k)
{
int i,j,t;
for(i=0;i<k-1;i++)
{
t=0;
for(j=0;j<k-i-1;j++)
{
if(b[j]>b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
t=1;
}

}
if(0==t)
break;
}
} 自认为这是冒泡排序最优化的算法了。这个冒泡排序的算法还能再优化吗?技术大牛指点。
...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
olderma 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

为什么这样的问题你要问3次呢~这么多分,都给我吧:

时间优化:
1.你的内循环中,每个步骤都需要计算一次k-i-1,这是非常低效的。
2.使用t做了一个技巧,用来判断循环终止,这是没有必要的,仅造成了多余的步骤

所以,应改为:
C/C++ code

void sort(int data[], int n) {
int i, j, t;

for (i……
[/Quote]
牛人。。。标准答案
wjain 2012-10-27
  • 打赏
  • 举报
回复
怎么进一个就是你的帖子`你发这么多干嘛`吸引目光?
楼主是来撒分的吧`~
virtualxmars 2012-10-27
  • 打赏
  • 举报
回复
为什么这样的问题你要问3次呢~这么多分,都给我吧:

时间优化:
1.你的内循环中,每个步骤都需要计算一次k-i-1,这是非常低效的。
2.使用t做了一个技巧,用来判断循环终止,这是没有必要的,仅造成了多余的步骤

所以,应改为:
C/C++ code

void sort(int data[], int n) {
int i, j, t;

for (i=0; i<n-1; i++) {
for (j=n-1; j>i; --j) {
if (data[j]<data[j-1])
{
t = data[j];
data[j] = data[j-1];
data[j-1] = t;
}
}
}
}



可读性优化:
1.对于交换数组的值来说,可以直接用swap宏,以此提高代码可读性、可维护性:
2.应明确指出,这是一个冒泡排序,否则当使用者不关心排序过程时,将增大选择难度

C/C++ code

void bubblesort(int data[], int n) {
for (int i=0; i<n-1; i++)
for (int j=n-1; j>i; --j)
if (data[j]<data[j-1])
swap(data[j], data[j-1]);
}



可扩展性优化:
1.尽可能是你的代码写一次,使用多次,所以应使用模板替代确定的数据类型,这样你的算法就能用在任何定义了operator < 的类型上,包括所有的内置类型,如unsigned,int,double,char,float,long等

C/C++ code

template <class T>
void bubblesort(T data[], int n) {
for (int i=0; i<n-1; i++)
for (int j=n-1; j>i; --j)
if (data[j]<data[j-1])
swap(data[j], data[j-1]);
}



当然,如果考虑到与STL库的兼容性,最好就是将函数的两个参数分别改为数组的起始地址,以及最后一个元素的地址+1,这样就能兼容STL的vector容器了,可扩展性进一步得到提升。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧