返回

数据结构的八大排序之冒泡排序、选择排序和插入排序

后端

在计算机科学中,排序算法是用于对一组元素进行排序的算法。排序算法有很多种,每种算法都有其不同的时间复杂度、空间复杂度、稳定性等特性。在这篇文章中,我们将介绍数据结构中的八种常见排序算法,分别是:

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 归并排序
  • 快速排序
  • 堆排序
  • 桶排序
  • 基数排序

在这篇文章中,我们将介绍前三种排序算法:冒泡排序、选择排序和插入排序。

冒泡排序

冒泡排序是一种简单直观的排序算法。它通过比较相邻元素的大小,将较大的元素向后移动,较小的元素向前移动,直到所有元素都按顺序排列。

冒泡排序的时间复杂度为 O(n^2),空间复杂度为 O(1)。它是一种不稳定的排序算法,这意味着它可能会改变相等元素的相对顺序。

冒泡排序的伪代码如下:

procedure bubbleSort(array)
  for i := 0 to length(array) - 2 do
    for j := 0 to length(array) - i - 1 do
      if array[j] > array[j + 1] then
        swap(array[j], array[j + 1])

选择排序

选择排序是一种简单的排序算法。它通过找到数组中最小(或最大)的元素,然后将其与第一个(或最后一个)元素交换,然后找到数组中次小(或次大)的元素,将其与第二个(或倒数第二个)元素交换,以此类推,直到所有元素都按顺序排列。

选择排序的时间复杂度为 O(n^2),空间复杂度为 O(1)。它是一种不稳定的排序算法。

选择排序的伪代码如下:

procedure selectionSort(array)
  for i := 0 to length(array) - 2 do
    minIndex := i
    for j := i + 1 to length(array) - 1 do
      if array[j] < array[minIndex] then
        minIndex := j
    swap(array[i], array[minIndex])

插入排序

插入排序是一种简单的排序算法。它通过将一个元素从数组中删除,然后将其插入到数组中适当的位置,直到所有元素都按顺序排列。

插入排序的时间复杂度为 O(n^2),空间复杂度为 O(1)。它是一种稳定的排序算法,这意味着它不会改变相等元素的相对顺序。

插入排序的伪代码如下:

procedure insertionSort(array)
  for i := 1 to length(array) do
    key := array[i]
    j := i - 1
    while j >= 0 and array[j] > key do
      array[j + 1] := array[j]
      j := j - 1
    array[j + 1] := key

总结

在本文中,我们介绍了数据结构中的三种常见排序算法:冒泡排序、选择排序和插入排序。这三种算法的时间复杂度都为 O(n^2),空间复杂度为 O(1)。冒泡排序和选择排序都是不稳定的排序算法,而插入排序是稳定的排序算法。

在下一篇博文中,我们将介绍另外五种排序算法:归并排序、快速排序、堆排序、桶排序和基数排序。这些算法的时间复杂度、空间复杂度和稳定性都有所不同。