a=b;
b=temp;
}
bool bubble(int *A,int lo,int hi)//起泡
{
bool sorted=true;//假设数列有序
while(++lo<hi)//自左向右,逐一检查各对相邻元素
{
if(A[lo-1]>A[lo])//如果逆序
{
sorted=false;//假设不成立
swap(A[lo-1],A[lo]);//交换两元素,使其有序
}
}
return sorted;
}
void bubbleSort(int *A,int lo,int hi)//反复起泡,直至有序
{
while(!bubble(A,lo,hi–));//当未全序时,继续起泡
}
int main()
{
/测试起泡排序**/
int a[10];
cout<<“测试数列:”;
for(int i=0;i<10;i++)
{
a[i]=9-i;
cout<<a[i]<<" ";
}
cout<<endl;
cout<<“bubbleSort后:”;
bubbleSort(a,0,10);
for(int i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
/******************************/
return 0;
}
运行结果:
3.代码改进
大家想一想,起泡排序是对数列进行反复的扫描起泡的,扫描的次数是数列的元素个数n。每次扫描检查的元素个数随着扫描次数的增加而减少,那我们可不可以让其减少的更快呢?答案是,视情况而定。如果数列是存在部分由于的,就可以。来看下面的一张图,让我们更好的理解:
我们设深蓝色部分是有序的,浅蓝色部分是无序的。如果对于这样一个数列,我们可以想办法让扫描忽略那些已经有序的数列区。这样可以提高一点效率。
代码实现:
int bubble(int *A,int lo,int hi)//起泡
{
int last=lo;//改进处(用last记录最后一个逆序对的位置)
while(++lo<hi)//自左向右,逐一检查各对相邻元素
{
if(A[lo-1]>A[lo])//如果逆序
{
last=lo;
swap(A[lo-1],A[lo]);//交换两元素,使其有序
}
}
return last;
}
void bubbleSort(int *A,int lo,int hi)//反复起泡,直至有序
{
while(lo<(hi=bubble(A,lo,hi)));//当未全序时,继续起泡
}
我们对bubble函数与bubbleSort函数做如上修改,便可达到目的。需知道last是用来记录最后一个逆序对位置的,如果最后一个逆序对比较靠前,我们就赚大发了,下次扫描就可以减少很多不必要的检查了(last后的都不需检查是否逆序了)。我们还应该知道此代码中的while(lo<(hi=bubble(A,lo,hi)))与未改进前代码中的while(!bubble(A,lo,hi–))的执行次数是一样的,都是数列有序就立马停止。
4.在向量模板中实现
//扫描交换–"bubble"函数
template
bool myVector::bubble(Rank lo,Rank hi)
{
bool sorted=true;//整体有序标志
while(++lo<hi)
{
if(_elem[lo-1]>_elem[lo])//自做向右,逐一检查各对相邻元素
{
sorted=false; //逆序
T temp;//交换
temp=_elem[lo-1];
_elem[lo-1]=_elem[lo];
_elem[lo]=temp;
}
}
return sorted;
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
必备的redis视频、面试题和技术文档**
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
[外链图片转存中…(img-uWZPRxvY-1713712554008)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!