如题,冒泡排序可以多次使用吗,我前两次用冒泡都实现了,第三次冒泡的时候总是会影响到前面两两位,这个用冒泡法该怎么做呢
有2种方法可用
1遍历找出最大最小按要求放置跳过2个位置继续直到完成
2控制比较方向每次只整理一个数据跳过1个位置
建议使用第一方案
#include<stdio.h>
void output(int arr[],int b,int e)
{
for(int i=b; i<=e; i++)
printf("%d ",arr[i]);
}
void swap(int a,int b,int arr[])
{
int tem=arr[a];
arr[a]=arr[b];
arr[b]=tem;
}
void sort(int arr[],int b,int e,int p) //下标
{
if(p)
for(int i=b; i<=e; i++)
for(int j=b; j<e-i+b; j++)
if(arr[j]>arr[j+1])
swap(j,j+1,arr);
if(!p)
for(int i=b; i<=e; i++)
for(int j=b; j<e-i+b; j++)
if(arr[j]<arr[j+1])
swap(j,j+1,arr);
}
int main()
{
int arr[]={9, 1, 4, 2, 3, 6, 5, 8, 7};
int size=sizeof(arr)/sizeof(int);
for(int j=0; j<size; j++)
{
int p=j%2==0;
sort(arr,j,size-1,p);
output(arr,j,j);
}
return 0;
}