数据结构与算法之冒泡排序(冒泡排序总结)

createh514小时前技术教程1

本篇一起来学习冒泡排序的算法,它可是面试中经常会问到的哦,而且挺常使用的。今天跟大家一起来回忆回忆大学那些年所学过的冒泡排序算法。

冒泡排序核心思想

算法最讲究的就是算法的思想,只要将算法思想想明白了,就可以通过伪代码来写出算法,那么再使用对应的语言来实现就可以了。

冒泡排序的核心思想就是通过与相邻元素的比较和交换,把小的数交换到最前面。因为这个过程类似于水泡向上升一样,因此被命名为冒泡排序。

举个小例子:对5,3,8,6,4这个无序序列进行冒泡排序。

首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6,3和4无需交换。5和3交换,变成3,5,4,8,6.这样一次冒泡就完了,把最小的数3排到最前面了。对剩下的序列依次冒泡就会得到一个有序序列。

其过程大概是这样的:

第一趟:

5,3,8,6,4(开始)

5,3,8,4,6(6和4交换)

5,3,4,8,6(8和4交换)

5,3,4,8,6(3和4不用交换)

3,5,4,8,6(5和3交换)

第二趟:

3,5,4,6,8(8和6交换)

3,5,4,6,8(4和6不用交换)

3,4,5,6,8(5和4交换)

3,4,5,6,8(3和4不用交换)

这里只需要两趟就可以排序完成了。

时间复杂度

从算法思想可知,冒泡排序需要两个循环来控制遍历,也就是需要n * n趟才能判断、交换完成。

冒泡排序的时间复杂度为O ( n2 )。

C语言实现

voidbubbleSortUsingC(intarr[],intlen){

// 代表走多少趟,最后一趟就不用再走了

for(inti=0;i<len-1;++i){

// 从后往前走,相当于泡从水底冒出来到水面

for(intj=len-1;j>i;--j){

// 如果后面的比前面一个的值还要小,则需要交换

if(arr[j]<arr[j-1]){

swap(arr,j,j-1);

}

}

}

}

voidswap(intarr[],inti,intj){

inttemp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

测试一下:

inta[5]={5,3,8,6,4};

bubbleSortUsingC(a,sizeof(a)/sizeof(int));

for(inti=0;i<sizeof(a)/sizeof(int);++i){

NSLog(@"%d",a[i]);

}

// 打印: 3, 4, 5, 6, 8 初步如期效果

冒泡排序比较简单,相信大家早就熟记在心!当然,我们要由简单到复杂的学习算法,算法是开发的根本,有了它,开发就有了思想,有了思想就能更轻松解决各种各样的问题了!

相关文章

C++ 初学阶段-冒泡法排序(c++冒泡排序模板)

C++ 初学阶段-冒泡法排序(c++冒泡排序模板)

#头条创作挑战赛#学程序重要的思维,冒泡法排序冒泡法排序,从第一个数值开始分别与后面的数值对比大小。大与就互换位置,直到换到最后一个数字。排序前数组:10,47,3,82,55,90,38,60,21...

冒泡、插入、选择排序(C语言)(c语言冒泡排序需要注意什么)

以下排序算法默认从小到大的升序排序。冒泡排序思路从数组的第一个数a[0]开始,向后遍历,每次比较a[i]和a[i+1]的值若a[i]大于a[i+1],就交换两个位置的数的值。重复上述1和2的操作至a[...

常用排序算法:冒泡排序,快速排序

在生活中,我们离不开排序。例如上体育课时,同学们会按照身高顺序进行排队;又如每一场考试后,老师会按照考试成绩排名次。在编程的世界中,应用到排序的场景也比比皆是。例如当开发一个学生 管理系统时,需要按照...

Python | 数据结构 - 冒泡排序和选择排序

排序算法比较排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序O(n2)O(n2)O(1)是选择排序O(n2)O(n2)O(1)不是插入排序O(n2)O(n2)O(1)是希尔排序O(n1....

冒泡排序算法(冒泡排序算法代码)

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,并且如果它们的顺序错误就交换它们。重复地进行这个过程直到整个列表都是有序的。以下是用C语言实现冒泡排序算法的示例代码:#inc...