冒泡排序的思想:两两比较,小的向前走。一趟下来,最大的数沉在最后面。
特点:时间复杂度:0(n^2) 空间复杂度: 0(1) 稳定性:稳定
待排序序列: 4 7 0 9 2 (4与7比较,不用交换。7与0比较交换。------->4 0 7 9 2------->7与9比较,不用交换。9与2比较交换------>4 0 7 2 9比较结束,得到下面的)
4 0 7 2 9 (一趟)
0 4 2 7 9
0 2 4 7 9
0 2 4 7 9
代码如下:
void BubbleSort(int *arr,int len){
int tmp;
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1;j++)
{
if(arr[j]>arr[j+1])
{
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
void show(int *arr,int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n ");
}
int main()
{
int arr[5]={4,0,7,9,2};
int len=sizeof(arr)/sizeof(arr[0]);
show(arr,len);
BubbleSort(arr,len);
show(arr,len);
return 0;
}
优化的代码如下:一趟的排序过程中是否发生数据交换,如果没有则说明已经有序,无需再次交换。
void BubbleSort(int *arr,int len)
{
int tmp;
bool flg=false;
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1-i;j++)//i=0是一趟排序结束,最后一个数已经有序 i=1时最后两个数已经有序
{
if(arr[j]>arr[j+1])
{
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
flg=true;//发生数据交换了
}
}
if(!flg)//没有发生数据交换
{
return ;
}
}
}