八大排序算法之一冒泡排序

来源:互联网 发布:phpsys cms 编辑:程序博客网 时间:2024/05/16 08:48

冒泡排序的思想:两两比较,小的向前走。一趟下来,最大的数沉在最后面。

  特点:时间复杂度: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 ;
}
}
}


     


    

原创粉丝点击