冒泡排序的原理:
冒泡排序和水泡在水中不断往上冒的情况类似。
冒泡排序:相邻元素两两比较,大的往后放,第一次完毕之后,最大值就找到了。
例如:

冒泡排序的代码(未优化):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
//冒泡排序就把最大的数字往后排
//这是没有优化的冒泡排序
void Bubble_Sort(int *arr,int len)
{
for(int i=0;i<len-1;i++)//代表循环的趟数,-1是因为最后一个数字不用比较,就是最小的
{
for(int j=0;j<len-1-i;++j)//(len-1-i)是因为冒泡排序,每一趟比较完,就多一个有序的数字,所以要-i
{
if(arr[j]>arr[j+1])
{
swap(arr[j],arr[j+1]);
}
}
}
}
int main()
{
int arr[]={1,4,3,2};
int len=sizeof(arr)/sizeof(arr[0]);
Bubble_Sort(arr,len);
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}冒泡排序的代码(优化):
冒泡排序的优化(完全有序的情况)
1.记录一下交换的次数,如果次数为0,说明完全有序
2.设置一个标志位,int flag=1#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void Bubble_Sort(int *arr,int len)
{
//int count=0;
int flag=1;
for(int i=0;i<len-1;i++)
{
flag=0;
for(int j=0;j<len-1-i;j++)
{
if(arr[j]>arr[j+1])
{
swap(arr[j],arr[j+1]);
flag=1;
//count++;
}
}
if(flag==0)
{
break;
}
/*if(count==0)
{
break;
}*/
}
}
void main()
{
int arr[]={1,2,3,4,8,9,4533,46,234};
int len=sizeof(arr)/sizeof(arr[0]);
Bubble_Sort(arr,len);
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}

6385

被折叠的 条评论
为什么被折叠?



