数据结构|冒泡排序与选择排序

简介: 数据结构|冒泡排序与选择排序

冒泡排序

排序算法可以说是算法中使用的比较频繁的,冒泡排序是一种简单的排序,它通过遍历,一次比较两个元素,如果排序错误就交换位置,遍历需要重复进行直到不再需要交换,才算排序完成。

冒泡排序的思路如下:

1.比较相邻的元素,如果前一个比后一个大(升序,降序则相反),就交换这两个元素的位置。

2.对每一对相邻元素做同样的工作,从开始第一对到结尾最后一对。这步做完后,最后的元素会是最大的数。

3.针对所有的元素重复重复以上的步骤,除了最后一个。

4持续每次对越来越少的元素重复上面的操作,直到没有任何一对数字需要比较。

冒泡排序图示

53

22

87

12

65

47

55

20

22

53

87

12

65

47

55

20

22

53

87

12

65

47

55

20

22

53

12

87

65

47

55

20

22

53

12

65

87

47

55

20

22

53

12

65

47

87

55

20

22

53

12

65

47

55

87

20

22

53

12

65

47

55

20

87

时间复杂度:On^2

代码实现

冒泡排序的代码实现并不难,对于初学者来说只需要注意循环次数这个坑就行。不难发现,冒泡排序的代码实现需要两层循环才能实现。

第一层(内层循环):每次将相邻的两个元素进行对比,使最大值移动到列表尾部

第二层(外层循环):第一层循环,第一次执行只能保证最后一位的元素位置正确,第二次保证倒数第二位的位置正确,以此类推,需要执行N-1次第一层循环,这就需要一个外层循环来实现。

以上述图片为例,共8个元素

第一次排序,两两对比,共对比7

第二次排序,两两对比,共对比6

。。。。。。

随着元素个数的变化,外层循环和内存循环的次数都在变化,我们就需要将外层循环和内存循环的循环次数联系在一起。


外层循环执行次数

外层循环

内层循环

第一次

J=0

需要执行n-1

第二次

J=1

需要执行n-1-1

第三次

J=2

需要执行n-1-2

。。。。。。


选择排序

时间复杂度:On^2),虽然选择排序和冒泡排序的时间复杂度一样,但实际上,选择排序进行的交换操作很少,最多会发生 N - 1次交换。而冒泡排序最坏的情况下要发生N^2 /2交换操作。从这个意义上讲,交换排序的性能略优于冒泡排序。而且,交换排序比冒泡排序的思想更加直观。  

选择排序思路

将本次遍历的第一个元素视为最小值,用mixValue记录其下标,遍历一次列表,只要存在比最小值小的数,便将当前下标赋值mixValue。本次遍历结束便交换最小值和遍历起始位的数。重复上述操作,每次遍历便将遍历起始位往后移一位,这样便能让数值小的数不断往前移。

目录
相关文章
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
532 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
搜索推荐
【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】
【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】
【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】
|
存储 算法 搜索推荐
【初阶数据结构篇】冒泡排序和快速排序(中篇)
与直接插入排序法相比,比较次数一致,但冒泡排序的交换需要执行三次,而直接插入排序因为使用了tmp临时变量存储要插入的数据,只用执行一次,所以直接插入排序法效率明显更高。
203 1
|
搜索推荐
【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】
【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
算法 搜索推荐
数据结构与算法-选择排序
数据结构与算法-选择排序
142 4
|
算法 搜索推荐
数据结构与算法-冒泡排序
数据结构与算法-冒泡排序
92 2
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
1055 1
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
292 1
|
搜索推荐 算法 大数据
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析

热门文章

最新文章