冒泡排序算法及改进
Posted 保佑珍珍2020跨考成功
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序算法及改进相关的知识,希望对你有一定的参考价值。
基本排序算法一:冒泡排序,单方向起泡,最重的排序在数组最后面,依次排序。
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;
}
}
以上是关于冒泡排序算法及改进的主要内容,如果未能解决你的问题,请参考以下文章