返回

排序算法初探:冒泡、插入、选择

前端

排序算法在计算机科学领域有着举足轻重的地位,它们决定了海量数据处理的效率。在这篇文章中,我们将深入浅出地探讨三种基本排序算法:冒泡排序、插入排序和选择排序。

冒泡排序

冒泡排序是一种基于比较的简单排序算法。它的工作原理是反复遍历待排序序列,将相邻元素进行比较,如果顺序不对,则交换两个元素的位置。这种遍历和比较的过程会持续进行,直到整个序列排序完毕。

冒泡排序的时间复杂度为 O(n^2),其中 n 为待排序序列的长度。这是因为在最坏的情况下,冒泡排序需要遍历序列 n 次,每次遍历需要比较 n 个元素。

def bubble_sort(arr):
  for i in range(len(arr) - 1):
    for j in range(len(arr) - 1 - i):
      if arr[j] > arr[j + 1]:
        arr[j], arr[j + 1] = arr[j + 1], arr[j]

插入排序

插入排序也是一种基于比较的排序算法。它的工作原理是将待排序序列视为两部分:有序序列和无序序列。每次循环,它都会从无序序列中取一个元素,并将其插入到有序序列中适当的位置。

插入排序的时间复杂度为 O(n^2),但它在某些情况下比冒泡排序效率更高。例如,当待排序序列接近有序时,插入排序只需要很少的交换操作。

def insertion_sort(arr):
  for i in range(1, len(arr)):
    key = arr[i]
    j = i - 1
    while j >= 0 and key < arr[j]:
      arr[j + 1] = arr[j]
      j -= 1
    arr[j + 1] = key

选择排序

选择排序也是一种基于比较的排序算法。它的工作原理是反复遍历待排序序列,在每次遍历中找到最小元素,并将其与序列开头交换位置。这种遍历和交换的过程会持续进行,直到整个序列排序完毕。

选择排序的时间复杂度也为 O(n^2),因为在最坏的情况下,选择排序需要遍历序列 n 次,每次遍历需要比较 n 个元素。

def selection_sort(arr):
  for i in range(len(arr) - 1):
    min_index = i
    for j in range(i + 1, len(arr)):
      if arr[j] < arr[min_index]:
        min_index = j
    arr[i], arr[min_index] = arr[min_index], arr[i]

总结

冒泡排序、插入排序和选择排序是三种基本排序算法,它们都有各自的优缺点。在需要对小规模数据进行排序时,这三种算法都可以使用。当待排序序列接近有序时,插入排序比冒泡排序和选择排序效率更高。而当数据量较大时,更复杂但效率更高的排序算法,如归并排序或快速排序,会成为更好的选择。