C++ Shell 排序2024 年 8 月 28 日 | 3 分钟阅读 在计算机科学中,排序算法经常用于以特定顺序排列数据。有许多种排序算法,每种算法都有其优点和缺点。希尔排序是最广泛使用的排序算法之一,有时也被称为递减增量排序。在这篇博文中,我们将讨论希尔排序算法以及如何使用 C++ 构建它。 希尔排序方法用于对数组进行排序,它比较相距较远的元素而不是相邻的元素。该过程首先使用一个增量序列将数组分成较小的子数组,也称为 h-排序数组。增量序列是一组数字,表示将要比较的元素之间的间距。Knuth 序列通常用于计算增量序列,其公式为 3k - 1,其中 k 是一个整数。 之后,算法在构建子数组后,对每个子数组执行插入排序。每个插入排序都是一个简单的排序算法,它检查每个元素与其邻居的位置关系,并在必要时进行交换。每个子数组都执行插入排序,从最大增量开始,并逐渐缩小增量,直到它等于1。算法现在对整个数组执行最终的插入排序,以确保所有元素都按正确顺序排列。 该算法以 Donald Shell 的名字命名,他于 1959 年开发并最初提出了该算法。既然我们熟悉了 希尔排序 的基础知识,那么让我们看看如何使用 C++ 实现它。实现分为三个基本步骤
示例让我们检查希尔排序算法的 C++ 源代码。 输出 上述代码的输出是 Sorted array: 1 2 3 4 5 6 7 8 9 说明 在上述代码中,我们首先使用数组的大小确定增量序列。从 n/2 的增量序列开始,我们将增量减半,直到它只剩下 1。之后,从增量开始,一直到数组的末尾,我们对每个子数组执行插入排序。插入排序比较的是相距较远的元素,而不是相邻的元素。 结论在这篇博文中,我们讨论了希尔排序算法及其 C++ 实现。希尔排序方法是一种快速有效的数组排序方法,它比较相距较远的元素而不是附近的元素。该过程首先使用增量序列将数组分成较小的子数组,然后对每个子数组进行插入排序。Knuth 序列用于计算增量序列,其表示为 3k - 1。在将增量减小到1之后,算法对整个数组执行最终的插入排序。 这篇博文的代码示例可以很容易地修改,以对不同数据类型或不同顺序(例如,降序)的数组进行排序。Pratt 和 Tokuda 序列用于创建增量序列,这是希尔排序方法可以探索的另外两种变体。希尔排序是一种广受欢迎的排序算法,因为它简单有效,并且在实践中是排序中小型数组的流行选择。 下一主题C++ 中的不规则数组 |
?在本文中,我们将讨论如何在 C++ 中将 std::string 转换为 lpcwstr,包括其语法和示例。介绍:C++ 的一个特性允许我们将字符串表示为一个属于某个类的对象。这个类就是 std::string。字符串在内部...
阅读 2 分钟
在本文中,您将通过示例了解 C++ 中二叉树的直径。连接二叉树中任意两个节点最长路径的边数允许我们计算二叉树的直径。二叉树的直径...
5 分钟阅读
位掩码是一种用于表示一组二进制标志的数据结构,其中每个位对应于特定的属性或特征。在 C++ 中,位掩码通常使用整数变量实现,其中每个位是 0 或 1,代表...
阅读 4 分钟
在本文中,我们将讨论 C++ 中 Apriori 算法的实现。在讨论其实现之前,我们必须了解 Apriori 算法。Apriori 算法用于在数据集中查找频繁项集,以揭示项之间的关联。它迭代地生成候选项集...
7 分钟阅读
C++ 类以防止对象复制 C++ 类实例有时根本不应被克隆。防止此类对象复制的三种方法是:不可复制的混合体、私有复制构造函数和赋值运算符,或者删除这些特定成员函数。不合适...
阅读 4 分钟
在本文中,您将了解 C++ 中的 mbrtoc32() 函数,包括其语法、参数和示例。使用标准库中的 mbrtoc32() 函数,可以将 C/C++ 中的多字节字符序列转换为宽字符(更准确地说,是 char32_t 表示的 32 位宽字符)……
阅读 3 分钟
在本文中,您将了解其语法和示例。什么是 std::get_temporary_buffer?C++ 中的
阅读 3 分钟
踏上迷人的计算机科学之旅,往往会让我们深入到二进制表示的核心。这种计算机语言为各种数据结构奠定了基础,其中一个特别有趣的应用程序是二进制链表。在本文中,我们将讨论...
阅读 8 分钟
按位异或运算符也称为 Exclusive OR,用“^”表示。顾名思义,它作用于操作数的位级别。按位异或运算符属于按位运算符。在按位异或运算符(XOR)中,两个操作数是...
阅读 8 分钟
iota() 函数包含在 C++ 的 numeric 头文件中。 iota() 函数用于为给定值范围内的每个元素赋予新值。赋值给元素后,元素的值默认会增加 1……
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India