01
02
03
04
引言
Introduction
只要涉及到数据,就会涉及到数据的排序问题,比如给你随机给你五个整数 3,1,5,2,4 。让你从小到大进行排序,那我们该怎样才是实现对这些整数的排序呢 ? 答案是多种多样的,比如用冒泡排序、选择排序、堆排序、归并排序、快速排序等等,这些排序方法都可以实现对整数排序,而这篇文章要讲的就是冒泡排序 本文将从以下几个问题对冒泡排序进行分析和讲解: 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次(重要!!!)。
(图源网络)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的排序过程,就知道代码是怎样执行的了 。