写在前面:
csdn网站用了也挺久,一直都是在上面找资源,看的都是大家写的博客。
临近毕业,上网刷题发现自己不懂的东西很多,需要学习的东西也很多,打算利用这个机会也来写写自己的博客,当作是学习过程中的一份笔记本。
冒泡排序在刷题的时候看到过很多次,也用到了很多次,但总是不能完全熟练的运用。就用第一篇博客,记录一下这个经典的排序算法。
一、冒泡排序的基本概念
冒泡排序,是一种相邻元素比较,并交换元素位置的算法。
比较分为两种:
- i>i+1(该位置元素大于后面的一个元素),两个元素交换位置。最终的结果是从小到大排列。
- i<i+1(该位置元素小于后面的一个元素),两个元素交换位置。最终的结果是从大到小排列。
根据实际情况取从小到大排列还是从大到小排列
二、实现过程
假设有k个元素
1.从第一个元素开始,将其和第二个元素进行比较,如果符合比较的条件,交换位置
2.将第二个元素和第三个元素比较,如果符合比较的条件,交换位置
3.重复该过程,直到比较完倒数第二个(k-1)和倒数第一个元素(k),那么第一次排序结束,最小值或者最大值将会放到末尾。
经过第一次排序后,结果可能并不是所期待的,那么就进行第二次排序。
对于第二次排序,因为最后一个元素已经是确定的结果(最大的元素或者最小的元素),那么此时只需要比较到(k-1)-1和k-1这两个元素即可
同理,第三次排序而已,最后两个元素已经是确定的结果,只需要比较到(k-2)-1和k-2即可
后面几次排序都是如此。但是最多需要k-1次排序。
例子:
图片来源(https://blog.csdn.net/guoweimelon/article/details/50902597)
三、代码实现(c++)
-
void bubble_sort(int arr[], int len) { for (int i = 0; i < len - 1; i++){ //外循环用来代表第几次排序 for (j = 0; j < len - 1 - i; j++){ //内循环用来第几次排序的具体实施 if (arr[j] > arr[j + 1]){ int temp; temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } }