百事通!冒泡排序

2022-12-29 16:27:24 来源:51CTO博客
一、冒泡排序的原理二、冒泡排序的逻辑解释三、代码实现四、代码优化

一、冒泡排序的原理

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步骤,除了最后一个。4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

二、冒泡排序的逻辑解释


【资料图】

有十个数字:10,9,8,7,6,5,4,3,2,1,将他们进行排序,排成升序。

先比较10与9,10>9,交换10与9,这十个数字变成:9,10,8,7,6,5,4,3,2,1;再比较10与8,10>8,交换10与8,这十个数字又变成:9,8,10,7,6,5,4,3,2,1.......以此类推,直至这一行数字变成:9,8,7,6,5,4,3,2,1,10(完成一趟冒泡排序,交换了9对数字),然后开始第二趟冒泡排序:先比较9与8,9>8,交换9与8,这十个数字变成:8,9,7,6,5,4,3,2,1,10......以此类推,直至这一行数字变成:8,7,6,5,4,3,2,1,9,10(完成第二趟冒泡排序,交换了8对数字)。并以此类推,直至这一行数字变成1,2,3,4,5,6,7,8,9,10,完成升序排序,总共需要9趟。

以此总结n个元素需要n-1趟冒泡排序(10个元素需要9趟冒泡排序)

一趟冒泡排序中,n个需要排序的数字中,需要交换n-1对数字(10个数字需要排序,共交换了9对)

三、代码实现

1、创建一个函数bubble_sort,先确定冒泡排序的次数

2、再写每次冒泡排序要实现的内容

3,排序后,再打印出来

#includebubble_sort(int arr[],int sz){  int i=0,j=0,tmp=0;  for(i=0;iarr[j+1])    {    tmp=arr[j];    arr[j]=arr[j+1];    arr[j+1]=tmp;    }  }  }}int main(){  int arr[]={10,9,8,7,6,5,4,3,2,1};  int sz=sizeof(arr)/sizeof(arr[0]);  int i=0;  bubble_sort(arr,sz);  for(i=0;i

(这个代码效率其实是不高的,当给的一组数字是1,2,3,4,5,6,7,8,9,10时,这不需要再排序了,但还进行一个一个的比较)

四、代码优化

定义int flag=0;,假设这一趟要排的数据已经有序

#includevoid bubble_sort(int arr[],int sz){  int tmp=0;  int j=0,i=0;  for(i=0;iarr[j+1])    {    tmp=arr[j];    arr[j]=arr[j+1];    arr[j+1]=tmp;    flag=0;            //本趟排序的数据其实不完全有序      }  }  if(flag==1)               //针对数组是0,1,2,3,4,5,6,7,8,9时,加上这句,能提升效率    {    break;                //当条件满足时,用break跳出for循环    }  }}int main(){  int arr[]={9,8,7,6,5,4,3,2,1,0};  int sz=sizeof(arr)/sizeof(arr[0]);  bubble_sort(arr,sz);  int i=0;  for(i=0;i                

标签: 冒泡排序 以此类推 逻辑解释

上一篇:将全局命名空间和零信任策略与 VMware Tanzu Service Mesh 结合使用
下一篇:今日关注:二维数组、数组指针以及指针数组