一、冒泡排序的原理二、冒泡排序的逻辑解释三、代码实现四、代码优化
一、冒泡排序的原理
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;i arr[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;i arr[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