搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 保佑珍珍2020跨考成功 > 冒泡排序算法及改进

冒泡排序算法及改进

保佑珍珍2020跨考成功 2019-10-10
举报

基本排序算法一:冒泡排序,单方向起泡,最重的排序在数组最后面,依次排序。

void BubbleSort(int *array,int n){
int a,i,j;
for (int i = n-1; i >0 ; i--) {
for(j=0;j<i;j++){
if(*(array+1)>*(array+j+1))
{
a=*(array+j);
*(array+j)=*(array+j+1);
*(array+j+1)=a;
}
}
}

冒泡排序算法的改进。

在冒泡排序最后交换的位置重新进行排序,不再进行记录交换,当某一次扫描中没有记录交换的时候终止排序。其中使用一个变量记录最后交换的位置然后在交换位置处进行下一次扫描。

void Bubble(int *array,int n)
{
int bound=n;
int m,j,a;
while(bound!=0)
{
m=0;
for(j=0;j<bound;j++)
{
if(*(array+j)>*(array+j+1)){
a=*(array+j);
*(array+j)=*(array+j+1);
*(array+j+1)=a;
m=j;
}
}
bound=m;
}
}

鉴于单向起泡排序,可以设计双向起泡。

void BubbleSort(int *array,int n)
{
int boundmin=0;
int boundmax=n;
int mmin,mmax,i;
int a;
while(boundmin<boundmax)
{
mmin=0;
mmax=0;
for(i=boundmin;i<boundmax;i++){
if(*(array+i)>*(array+i+1))
{
a=*(array+i);
*(array+i)=*(array+i+1);
*(array+i+1)=a;
mmax=i; //记录最后一次下降发生交换的位置
}
}
if(mmax==0) break;boundmax=mmax;
for(i=boundmax-1;i>boundmin;i--)
{
if(*(array+i)<*(array+i-1))
{
a=*(array+i);
*(array+i)=*(array+i-1);
*(array+i-1)=a;
mmin=i; //记录最后一次上升的交换位置
}
}

if(mmin==0)

        break;

    boundmin=mmin;

}
}


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《冒泡排序算法及改进》的版权归原作者「保佑珍珍2020跨考成功」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注保佑珍珍2020跨考成功微信公众号

保佑珍珍2020跨考成功微信公众号:HITCSAPP

保佑珍珍2020跨考成功

手机扫描上方二维码即可关注保佑珍珍2020跨考成功微信公众号

保佑珍珍2020跨考成功最新文章

精品公众号随机推荐

举报