冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析

冒泡排序(Bubble Sort)

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过比较相邻的元素并交换它们的位置来达到排序的目的。具体来说,冒泡排序的基本思想是从左到右依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。这样一轮比较下来,最大的元素就会被交换到数组的末尾。然后再从左到右进行下一轮比较,直到整个数组都有序为止。

冒泡排序的时间复杂度为 O(n^2),其中 n 是待排序数组的长度。虽然冒泡排序的时间复杂度较高,但它的实现简单,易于理解,适用于一些小型数据集的排序
下面给大家展示代码:eb3ca0e804af44219343e0c84c6a0161.png

b1773798967346ee8fa7b3812b30b82f.png

ac7a44478697436faabefe3ec3386ebb.png

体思路:从左往右不断比较相邻的两个数,将大的数不断往右移,经过数趟从左往右比较数组的排序便可成为升序的形式,注意在比较时已经排序过到右边的数就不需要再进行比较了,所以上面第二个for循环条件为  j<9-i ,相对其他两种排序冒泡排序相对简单,下面我们讲第二个排序!


选择排序(Selection Sort)

选择排序(Selection Sort)是一种简单直观的排序算法。它首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的
时间复杂度为 O(n^2)空间复杂度为 O(1)。虽然选择排序的时间复杂度较高,但它的实现简单,适用于一些小型数据集的排序。
                                                            下面展示代码:

d13ab9dded994a5bbb4e772e07edb757.png58ef884ea82f4a289a987c0c4d22e6b2.png

代码实现思路:我们从arr[0] 开始到arr[9] 都对其前面的数进行比较,将最小的值放在arr[i]处,上面图片中注那里我解释一下,这里举个列子我们用arr[0]比较后9位得出最小值放在arr[0]这里,此时这个数就是第1小也就是i+1小,因为此时i为0。依次往后比较我们也就能够得到一个升序的排序!下面讲最后一个排序也是三个之中最难的排序!!!


快速排序(Quick Sort)

快速排序(Quick Sort)是一种分治的排序算法。快速排序算法会选择数组中的一个元素作为枢轴(pivot),然后将数组中所有其他元素与该枢轴元素进行比较,根据比较结果将其放在枢轴的左边或右边,最终将数组分为两个子数组。然后对这两个子数组递归地应用快速排序算法,直到每个子数组只包含一个元素为止。

快速排序的平均时间复杂度为O(nlogn),空间复杂度为O(logn)。然而,在最坏情况下,快速排序的时间复杂度为O(n^2)。快速排序的性能取决于枢轴元素的选择,选择一个好的枢轴元素可以提高快速排序的效率。

快速排序是一种高效的排序算法,适用于大规模数据的排序。它的实现比较复杂,但在许多情况下是首选的排序算法。
                                                                  下面展示代码:

6368415b52d943749bbacdc9d0f280d1.pngd3ebb7abc3084d18b2fbb88c3c52501d.png5ac5e10ff86047929fc070145fbdd19f.png4408673c736f4424a2af30bd1c1872db.png

只看代码可能难以理解,下面看一下简图和具体思路:

首先我们在开头定义了一个转换函数Swap()函数供后面使用,然后数组从左边找比key大的值,从右边找比key小的值,然后进行互换,然后左右两边继续找对应其条件的值(即红字体),直到right与left相等(记住代码是一定要right先往左移的不然就出现错误了),然后arr[left]与arr[key]交换后从right(写left也行,因为此时right==left)的左右分开,就是上面代码的right-1和right+1,分开过后再对分开的两部分在进行快速排序,即运用递归再次调用函数,直至结束!!

e010337a80904ea8801ac712b783879b.png


至此本文结束,感谢各位的耐心观看,如果可以,一键三连哦!如有错误可以指出,本人接受建议,并由衷感谢您!!!d668fc6ceaea4fc5802c691593c2170f.png

  • 40
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值