常见排序和查找原理

大部分常用的算法写法都已经固定,对于非算法类的开发人员并不要求完整实现,但是起码能看懂并理解其原理,这在我们开发中有很大的帮助。

常见排序算法的原理

1. 冒泡排序 (Bubble Sort)

原理:冒泡排序通过重复地遍历列表,比较相邻元素并交换它们,如果它们的顺序错误。这一过程会持续进行直到没有需要交换的元素为止。

  • 步骤
    • 比较相邻的元素。如果第一个比第二个大,就交换它们。
    • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这一步骤完成后,最后的元素会是最大的数。
    • 针对所有的元素重复以上的步骤,除了最后一个。
    • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  • 复杂度:平均时间复杂度和最坏时间复杂度都是 (O(n^2))。
2. 快速排序 (Quick Sort)

原理:快速排序使用分治法将列表分为两个子列表。快速排序的基本步骤包括选取一个基准值,将列表重新排序,使得所有比基准值小的元素排在基准值前面,所有比基准值大的元素排在基准值的后面,然后递归地对两个子列表进行快速排序。

  • 步骤
    • 选择一个基准元素(pivot),通常是第一个元素或者最后一个元素。
    • 重新排序数组,所有比基准值小的元素放在基准值前面,所有比基准值大的元素放在基准值后面。
    • 递归地对基准值两侧的子数组进行上述步骤。
  • 复杂度:平均时间复杂度是 (O(n \log n)),最坏情况(例如,每次选的基准都是最大或最小元素)下的时间复杂度是 (O(n^2))。
3. 选择排序 (Selection Sort)

原理:选择排序每次从未排序的部分选择最小(或最大)的元素,将其放在已排序部分的末尾。

  • 步骤
    • 从未排序部分中找到最小(或最大)元素。
    • 将该元素与未排序部分的第一个元素交换位置。
    • 从剩余的未排序部分中继续上述过程,直到所有元素均排序完毕。
  • 复杂度:时间复杂度是 (O(n^2))。
4. 插入排序 (Insertion Sort)

原理:插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

  • 步骤
    • 从第一个元素开始,该元素可以认为已经被排序。
    • 取出下一个元素,在已经排序的元素序列中从后向前扫描。
    • 如果该元素(已排序)大于新元素,将该元素移到下一位置。
    • 重复上述步骤,直到找到已排序的元素小于或等于新元素的位置。
    • 将新元素插入到该位置。
  • 复杂度:时间复杂度是 (O(n^2))。
5. 归并排序 (Merge Sort)

原理:归并排序是使用分治法的另一种排序算法。它将列表分成两半,对每一半进行排序,然后将排序好的两半合并在一起。

  • 步骤
    • 将数组分成两半。
    • 递归地对两半分别进行归并排序。
    • 合并两个排序好的子数组。
  • 复杂度:时间复杂度是 (O(n \log n))。

常见查找算法的原理

1. 线性查找 (Linear Search)

原理:线性查找是最简单的查找算法,它逐个检查数组中的每个元素,直到找到目标元素或检查完所有元素。

  • 步骤
    • 从数组的第一个元素开始,逐个比较每个元素,直到找到目标元素或者到达数组的末尾。
  • 复杂度:时间复杂度是 (O(n))。
2. 二分查找 (Binary Search)

原理:二分查找是一种高效的查找算法,前提是数组已经排好序。它通过逐步将查找范围减半来快速找到目标元素。

  • 步骤
    • 找到数组的中间元素。
    • 如果中间元素正好是目标元素,查找过程结束。
    • 如果目标元素比中间元素小,继续在左半部分进行二分查找。
    • 如果目标元素比中间元素大,继续在右半部分进行二分查找。
  • 复杂度:时间复杂度是 (O(\log n))。

这些排序和查找算法是计算机科学的基础,理解它们的原理和复杂度对编写高效代码非常重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬_小彬

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值