0
点赞
收藏
分享

微信扫一扫

冒泡排序(数组中的问题)

问题:使用冒泡排序的方法,将数组中的元素按照升序的方式将其排列。

冒泡排序核心思想:两两相邻元素进行比较,满足条件则交换;

      ① 先确认趟数;

      ② 写下一趟冒泡排序的过程;

      ③ 最后进行交换;

#include<stdio.h>

void  bubble_sort(int arr[],int sz)  //这里不需要返回,所以不选择int

{

int i=0;

for(i=0;i<sz-1;i++)     //计算出冒泡排序的趟数

{

int j=0;

for(j=0;j<sz-i-1;j++)   //计算出每一趟所要比较的对数

{

if(arr[j]>arr[j+1])     //if语句在这里实现的是交换值的大小

{

int tmp=arr[j+1];

arr[j+1]=arr[j];

arr[j]=tmp;

}

}

}

}

int  main()

{

int i=0;

int arr[]={1,2,3,4,5,6,7,8,9};

int  sz=sizeof(arr)/sizeof(arr[0]);

bubble_sort(arr,sz);        //函数传参,传过去的是arr数组首元素的地址

for(i=0;i<sz;i++)

{

printf("%d ",arr[i]);

}

return  0;

}

以上代码 ,不难看出,当数组中的元素无序时,此方法较为合理。当元素有序时,此方法是不是有点繁琐呢?

因此代码可进行优化,如下:

只需将函数声明部分做一下修改;

void  bubble_sort(int arr[],int sz)  

{

int i=0;

int flag=1;//假设这一趟排序的数组已经有序

for(i=0;i<sz-1;i++)     

{

int j=0;

for(j=0;j<sz-i-1;j++)   

{

if(arr[j]>arr[j+1])   

{

int tmp=arr[j+1];

arr[j+1]=arr[j];

arr[j]=tmp;

flag=0;//本趟排序的数据其实不完全有序

}

}

if(flag==1)

break;

}

}


















举报

相关推荐

0 条评论