您的位置:首页 > 其它

冒泡排序演进优化

2017-03-26 21:18 197 查看

冒泡演进优化

要点:相邻两两相比,每次循环将选择最大(小)。类气泡

void bubble(int a[],int n)
{
int tmp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
//两个数交换有多种方法
tmp = a[j];
a[j] = a[j+1];
a[j] = tmp;
}
}
}
}

int main()
{
int arr[] = {3,5,5,7,2,8,4};
bubble(arr,sizeof(arr)/sizeof(arr[0]));//注意:求数组的元素个数
return 0;
}


优化1

若无交换则已排序

void bubble1(int a[],int n)
{

int tmp,flag;
for(int i=0;i<n-1;i++)
{
flag = 0;
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
flag = 1;
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
if(flag == 0)
break;
}
}


优化2就是

记录交换的最后位置,则后面的无交换则为有序,并把最后的位置作为下次结束位置

可以与优化1类似 优化1是整体看,优化2是部分

void bubble2(int a[],int n)
{
int tmp,k,flag=n-1;
for(int i=0;i<flag;i++)
{
k = flag;
flag = 0;
for(int j=0;j<k;j++)
{
if(a[j]>a[j+1])
{
flag = j;
tmp  = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡排序 优化