冒泡排序代码_带你图解排序算法之——冒泡排序算法(一)

01

引言

Introduction

只要涉及到数据,就会涉及到数据的排序问题,比如给你随机给你五个整数  3,1,5,2,4 。让你从小到大进行排序,那我们该怎样才是实现对这些整数的排序呢 ? 5beed107d0b415114fe32997346bebb7.png 答案是多种多样的,比如用冒泡排序、选择排序、堆排序、归并排序、快速排序等等,这些排序方法都可以实现对整数排序,而这篇文章要讲的就是冒泡排序 本文将从以下几个问题对冒泡排序进行分析和讲解:  1   冒泡排序的大概过程是什么?  2    怎样用代码实现冒泡排序?  3   冒泡排序的代码详解
02

 冒泡排序的过程 

The process of bubble sort

下面拿一个例子说明冒泡排序的大概过程。 冒泡排序的基本思想就是:首先选出来最大的数放到最后面,再选出来第二大的放到最大的数前面,按照前面的方法直到排序完成。 下面来说用冒泡排序对3,1,5,2,4进行排序(从小到大排序)  1    我们首先要选出来这个五个数中最大,选择方法:首先看第一个数 3和第二个数1,拿着3和1比较,发现3>1,交换他俩的位置,这时候这一组数就变成了1,3,5,2,4  2    再看交换后的第二个数 3和第三个数5,发现3<5.符合从小到大,不用交换顺序。  3   再看交换后的第三个数5和第四个数2,发现5>2,交换他俩的位置,这时候这一组数就变成了1,3,2,5,4.  4   再看交换后的第四个数5和第五个数4,发现5>4,交换他俩的位置,这时候这一组数就变成了1,3,2,4,5  5   上面的这四步算是第一轮查找,把最大的数字5放到了最后面。下面在及性能第二轮查找  6   首先看第一个数1和第二个数3,发现1<3,符合条件,不用交换顺序  7   再看第二个数3和第三个数2,发现3>2,交换他俩的位置,这时候这一组数就变成了1,2,3,4,5。  8   再看第三个数3和第四个数4,发现3<4,符合条件,不用交换顺序。  9   到现在为止第二轮的查找结束(不用对第五个数5进行比较,因为他已经是最大的了),通过上面的6-8,把第二大的数4放到了倒数第二个位置。接下来按照上面方法再进行查找即可。

总结:假设一共有n个数,那么需要n-1上面的查找操作(每一次都会把 “最大的数放到后面”,等进行n-1一次之后,剩余的1个数不用比较也是最小的数了),而且每一次查找过程中,比较相邻两个数的次数还不一样,第一次需要比较n-1次,第二次需要n-2(最后一个数已经确定,不用比较了)。后面的每次查找都比前面查找的比较次数少一,即第i次查找过程,需要比较n-i次(重要!!!)。

635a21bde8182cbc008c52a20d7d59b6.gif (图源网络)
03

 怎样用代码实现冒泡排序 

How to implement bubble sort in code

通过上面对3,1,5,2,4的排序过程讲解,我们需要明确已知的三个条件  1    我们要排序的数组有哪些数?数组长度为多少?  2   我们要查找的次数为多少?  3   我们需要比较的次数为多少?
#includeusing namespace std;//冒泡排序函数    稳定 void BubbleSort(int arr[],int len){  int temp;  for(int i=0;i  {    for(int j=0;j    {      if(arr[j]>arr[j+1])//交换这两个数       {        temp=arr[j];        arr[j]=arr[j+1];        arr[j+1]=temp;      }    }  }}//输出数组的值void printf(int arr[],int len){  for(int i=0;i    cout<  cout<}int main(){  //要排序的数组   int arr[]={3, 44,38, 5,47,15,36,26,27,2 ,46,4 ,19,50,48};  int len=15;//要排序的数组长度  //排序   BubbleSort(arr,len);  //输出   printf(arr,len);  return 0;}

04

  冒泡排序代码讲解  

Explanation of bubble sort

代码讲解

 

 1   上面代码写了两个函数,一个是printf函数,这个是输出排序后的数组。

 2   另一个函数就BubbleSort函数,在这个函数里面有一个二重循环,外层循环的的次数就是要查找的次数,内层循环的次数的就是要比较的次数,刚好对应上面说的(这里数组下标是从0开始的)。

 3   如果对上面代码有疑问,自己可以按照前面的过程,模拟一边对3,1,4,5,2的排序过程,就知道代码是怎样执行的了 。

ba31b48689b6b2069e11a5a596933a49.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值