- 选择排序
概述:
选择排序是一种简单的排序算法,其基本思想是每次从未排序的部分中选择最小(或最大)的元素,然后放到已排序部分的末尾。
步骤:
从未排序部分中找到最小的元素。
将这个最小的元素与未排序部分的第一个元素交换。
将已排序部分扩大一位,未排序部分缩小一位。
重复以上步骤直到所有元素排序完成。
时间复杂度:
最好情况:O(n²)
平均情况:O(n²)
最坏情况:O(n²)
空间复杂度: O(1)(原地排序)
特点:
简单直观,但效率较低。
不适合处理大量数据的排序。 - 冒泡排序
概述:
冒泡排序是一种简单的排序算法,其基本思想是通过重复交换相邻元素,使得较大的元素逐渐“浮”到数组的末尾(或较小的元素“沉”到数组的开始)。
步骤:
从数组的开始,比较相邻的元素。
如果前一个元素大于后一个元素,交换它们。
经过一轮比较后,最大的元素被移到数组的末尾。
对剩余的部分重复上述步骤,直到整个数组有序。
时间复杂度:
最好情况:O(n)(当数组已经有序时)
平均情况:O(n²)
最坏情况:O(n²)
空间复杂度: O(1)(原地排序)
特点:
实现简单,但效率较低。
不适合处理大量数据的排序。 - 插入排序概述:
插入排序是一种简单的排序算法,其基本思想是将每个新元素插入到已经排序好的部分中。
步骤:
从数组的第二个元素开始,将当前元素与前面的已排序部分进行比较。
将当前元素插入到合适的位置,使得已排序部分依然有序。
对剩余的未排序部分重复以上步骤,直到整个数组有序。
时间复杂度:
最好情况:O(n)(当数组已经有序时)
平均情况:O(n²)
最坏情况:O(n²)
空间复杂度: O(1)(原地排序)
特点:
对小规模数据或几乎有序的数据排序效率较高。
适合用于在线排序。 - 计数排序
概述:
计数排序是一种非比较型排序算法,适用于范围较小的整数数据。其基本思想是通过统计每个元素的出现次数来确定其在排序结果中的位置。
步骤:
确定数组中元素的最大值和最小值,计算数据的范围。
创建一个计数数组,用于统计每个元素的出现次数。
计算计数数组的前缀和,确定每个元素在排序结果中的最终位置。
根据计数数组将元素放置到正确的位置上。
时间复杂度:
最好情况:O(n + k)
平均情况:O(n + k)
最坏情况:O(n + k)
空间复杂度: O(n + k)(n 是待排序元素的个数,k 是数据的范围)
特点
适用于范围较小的整数数据。
不适合处理范围很大的数据或浮点数。
速度快且时间复杂度稳定,但需要额外的空间。