社区
C语言
帖子详情
冒泡排序最优化的方法?
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
打赏
收藏
冒泡排序最优化的方法?
void sort(int b[],int k) { int i,j,t; for(i=0;i<k-1;i++) { t=0; for(j=0;jb[j+1]) { t=b[j]; b[j]=b[j+1]; b[j+1]=t; t=1; } } if(0==t) break; } } 自认为这是冒泡排序最优化的算法了。这个冒泡排序的算法还能再优化吗?技术大牛指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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容器了,可扩展性进一步得到提升。
面试之排序算法
排序算法是我们面试被问到最多的基础算法,本课程详细介绍了七种排序算法,包括插入排序、选择排序、
冒泡排序
、谢尔排序、快速排序、堆积排序和二路并归排序。每种算法都详细介绍了核心思想、详细步骤、时间复杂度和...
【08】排序(上):为什么插入排序比
冒泡排序
更受欢迎?
08排序(上):为什么插入排序比
冒泡排序
更受欢迎?1. 排序
方法
与复杂度归类2. 如何分析一个“排序算法”?3.
冒泡排序
3.1. 排序原理3.2. 代码实现(Python)3.3. 性能分析4. 有序度&无序度&满有序度5. 插入...
冒泡排序
以及优化思路
冒泡排序
以及优化 一、思路 正常思路: 一边比较一边向后两两交换,将最大值/最小值冒泡到最后一位。 优化一: 使用一个变量记录当前轮是否发生交换,如果未发生交换,则表示已经排好序。 优化二: 除了比较使用...
冒泡排序
算法以及优化
冒泡排序
的英语名是Bubble Sort,是一种最基础的交换排序。 大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点一点的向上浮。而
冒泡排序
之所以...
【C语言】十大排序之
冒泡排序
(三种优化)
冒泡排序
概念 基础代码演示 第一种优化方式,加入flag判断最大数有多少已经排好 第二种优化方式,双向冒泡 第三种优化方式,设立flag加双向冒泡
冒泡排序
概念 (Bubble Sort)是一种简单排序,在最坏情况下...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章