排序算法

2025 年 4 月 24 日 | 4 分钟阅读

排序是将数组元素按升序或降序排列的过程。例如,考虑一个数组 A = {A1, A2, A3, A4, ... An},如果 A 的元素按 A1 > A2 > A3 > A4 > A5 > ... > An 的顺序排列,则称该数组按升序排列。

考虑一个数组;

int A[10] = { 5, 4, 10, 2, 30, 45, 34, 14, 18, 9 }

按升序排列的数组将给出如下;

A[] = { 2, 4, 5, 9, 10, 14, 18, 30, 34, 45 }

有很多技术可以执行排序。在本教程的这一部分,我们将详细讨论每种方法。

排序算法的类型

各种类型的排序算法有:

  • 基于比较的算法:这类排序算法仅根据最佳情况进行决策。基于比较的算法的最佳情况是 O(nlogn),最坏情况是 O(n2)。
  • 基于交换的算法:此算法通过交换次数(也称为干预次数)进行分类。
  • 基于稳定性的算法:如果排序算法遵循具有相似键的元素的相对顺序,从而使原始顺序在输出中保持不变,则它是稳定的。例如:索引 i 和 j,使得 A[i] 等于键 A[j],如果记录 R[i] 在原始文件中位于记录 R[j] 之前,则记录 R[i] 在排序列表中位于记录 R[j] 之前。
  • 基于不稳定性的算法:此类算法不遵循顺序。
  • 基于适应性的算法:某些排序算法的复杂性根据前置条件 [快速排序] 而变化。这类算法称为自适应算法。
  • 内部排序算法:在排序过程中完全使用主内存的算法称为内部排序算法。内部排序要求数据集合完全适合计算机的主内存。
  • 外部排序算法:当数据集合不能一次性完全容纳在计算机的主内存中,而必须驻留在磁带、磁盘等辅助存储设备中时,我们可以使用外部排序。

排序算法

下表描述了排序算法及其说明。

序号排序算法描述
1冒泡排序它是最简单的排序方法,通过重复将最大元素移动到数组的最高索引来执行排序。它包括将每个元素与其相邻元素进行比较并相应地替换它们。
2桶排序桶排序也称为箱排序。它通过将元素分配到数组(也称为桶)中来工作。在此排序算法中,桶通过使用不同的排序算法单独排序。
3梳排序梳排序是冒泡排序的改进形式。冒泡排序比较所有相邻值,而梳排序删除列表中末尾附近的所有“乌龟值”或小值。
4计数排序这是一种基于键的排序技术,即对象根据作为小整数的键进行收集。计数排序计算对象的出现次数并存储其键值。通过添加前一个键元素并将其分配给对象来形成新数组。
5堆排序在堆排序中,根据选择从数组元素中维护最小堆或最大堆,并通过删除堆的根元素来对元素进行排序。
6插入排序顾名思义,插入排序将数组的每个元素插入到其正确位置。这是一种非常简单的排序方法,用于在玩桥牌时整理牌组。
7合并排序归并排序遵循分治法,其中,列表首先被分成相等元素的集合,然后列表的每一半都使用归并排序进行排序。排序后的列表再次组合以形成一个基本排序数组。
8快速排序快速排序是最优化的排序算法,它以 O(n log n) 次比较执行排序。与归并排序一样,快速排序也通过使用分治法来工作。
9基数排序在基数排序中,排序的完成方式与我们根据字母顺序对名称进行排序的方式相同。它是一种用于整数的线性排序算法。
10选择排序选择排序找到数组中的最小元素并将其放在列表中的第一个位置,然后找到数组中的第二个最小元素并将其放在第二个位置。这个过程一直持续到所有元素都被移动到它们的正确顺序。它的运行时间为 O(n2),比插入排序差。
11希尔排序希尔排序是插入排序的推广,它通过比较相隔几个位置的元素来克服插入排序的缺点。

下一个主题冒泡排序算法