您的位置:首页 > 其它

优化的冒泡排序的实现

2015-12-01 21:50 225 查看
冒泡排序,又是这个经典的算法,它虽然效率不高却始终没有被人们遗忘。今天,我们不讨论冒泡排序的用法而是来讨论如何让它变得更高效。
首先我们写出最原始的冒泡排序算法
int main()
{
int i=0;

for(i=0;i<n-1;i++)
{
for(j = 0;j <= n-i-1;n++)
{
if(str[j] > str[j+1])
{
int tmp = 0;
tmp = str[j];
str[j] = str[j+1];
str[j+1]=tmp;
}
}
}
for (i = 0; i < n; i++)
{
printf("%d ", b[i]);
}
system("pause");
return 0;
}
下面我们来优化它一下,让它更加高效!
int main()
{
int i=0;
int j=0;
int flag=0;//设置标志变量
int str[]={1,3,5,7,9,2,4,6,8,0};
int n=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<n-1;i++)
{
for(j = 0;j <= n-i-1;n++)
{
flag = 0;
if(str[j] > str[j+1])
{
int tmp = 0;
tmp = str[j];
str[j] = str[j+1];
str[j+1]=tmp;
flag=1;
}
}
if(flag==0)
break;
}
for (i = 0; i < n; i++)
{
printf("%d ", b[i]);
}
system("pause");
return 0;
}
上面的程序因为加入了标识位可以避免我们重复的做无用的排序
最后让我们用指针的运算来实现冒泡排序!
void bubble(int *arr,int size)
{
int i=0;
int j=0;
for(i=0;i<size-1;i++)
{
for(j=0;j<size-1-i;j++)
{
if(*(arr+j)>*(arr+j+1))
{
int tmp=*(arr+j);
*(arr+j)=*(arr+j+1);
*(arr+j+1)=tmp;
}
}
}
}
冒泡排序这样的算法虽然有固定的模式,但我们可以尝试着通过不同的方法来实现它,对于初学者来说,这样的做法能够提高学习的兴趣以及多方面思考问题的思维!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: