C++ 冒泡排序双向链表

2024-02-22

我知道冒泡排序可能不是最快的方法,但它是可以接受的。我只是在将算法调整为数组中的双链接列表时遇到麻烦。

我的双链表有一个 int 类型和一个 string 类型来保存数字和单词。我的列表是用插入排序来排序的,我编写了该插入排序来按字母顺序排序,现在我需要按数字顺序重新排序我的双链表,从最大到最小。

我的麻烦点是如何运行这个循环,以便它得到正确彻底的排序,而不仅仅是一次。

到目前为止,这是我所取得的成果:

void DblLinkedList::ReorderListNumeric()
{
dummy = new Node();
temphead = head;
temp = head->next;

while(tempTwo->next != NULL)
{
    if(temp->wordCount < tempTwo->wordCount)
    {               
        dummy->word = tempTwo->word;
        dummy->wordCount = tempTwo->wordCount;

        tempTwo->word = temp->word;
        tempTwo->wordCount = temp->wordCount;

        temp->word = dummy->word;
        temp->wordCount = dummy->wordCount;
    }
    temp = tempTwo;
    tempTwo = tempTwo->next;
}
}

我的麻烦点是如何运行这个循环,以便它得到正确彻底的排序,而不仅仅是一次。

如果您已经有一个循环可以成功执行一次传递并且交换也可以,那么相对有效地执行多次传递的通常方法是:

set swapped = true
while swapped:
    set swapped = false
    do your one pass, setting swapped to true whenever you swap

This avoids the naive n2 solution that beginners will invariably start with.

确实如此。

You set swapped to true这样您最初输入列表然后将其设置为false立即,在循环内。

您的单次通行证将设置swapped仅当发生交换时。如果您的传递中没有发生交换,则列表将被排序并退出循环。

If any交换发生时,swapped标志已设置,您将需要运行另一遍。这是因为交换可能位于列表的末尾,并使之前的订单无效,例如:

Initial: 1   2   3   4   6   7   5
  Pass1: 1   2   3   4   6   5<=>7 (swap)
  Pass2: 1   2   3   4   5<=>6   7 (swap)
  Pass3: 1   2   3   4   5   6   7 (no swap, so exit loop)

因此,假设您的代码是正确的,请从以下内容开始:

void DblLinkedList::ReorderListNumeric() {
    Node *ptr, *dummy = new Node();

    // Zero or one element, no sort required.

    if (head == NULL) return;
    if (head->next == NULL) return;

    // Force initial entry.

    int swapped = 1;
    while (swapped) {
        // Flag as last time, then do one pass.

        swapped = 0;

        ptr = head;
        while (ptr->next != NULL) {
            if (ptr->wordCount < ptr->next->wordCount) {
                // Swapping, need another pass.

                swapped = 1;

                dummy->word = ptr->word;
                ptr->word = ptr->next->word;
                ptr->next->word = dummy->word;

                dummy->wordCount = ptr->wordCount;
                ptr->wordCount = ptr->next->wordCount;
                ptr->next->wordCount = dummy->wordCount;
            }
            ptr = ptr->next;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 冒泡排序双向链表 的相关文章

  • setContextProperty 和对象的 setProperty 之间的区别

    我现在真的很困惑 有什么区别 QQmlApplicationEngine engine engine rootContext setContextProperty myObject userData and object gt setPro
  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • 起订量要求?违背了目的?

    是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的 我的意思是 如果我必须修改我的对象并虚拟化我想要模拟的每个访问器 我难道不能继承我的类并自己模拟它吗 你的问题非常有效 但如果你仔细想想 没有其他方法可以模拟课程 如果你采用一个接
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 更改 IdentityServer4 实体框架表名称

    我正在尝试更改由 IdentityServer4 的 PersistedGrantDb 和 ConfigurationDb 创建的默认表名称 并让实体框架生成正确的 SQL 例如 而不是使用实体IdentityServer4 EntityF
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • “int i=1,2,3”和“int i=(1,2,3)”之间的区别 - 使用逗号运算符的变量声明[重复]

    这个问题在这里已经有答案了 int i 1 2 3 int i 1 2 3 int i i 1 2 3 这些说法有什么区别 我无法找出任何具体原因 Statement 1 Result Compile error 运算符的优先级高于 运算符
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • C# 粘贴到文本框时检查剪贴板中的字符

    有没有一些方法可以在粘贴到文本框 C 之前仅检查剪贴板中的字符 Ctrl V 和右键单击 gt 粘贴 但不使用 MaskedTextbox 在文本框文本更改中添加规则以仅接受数字 例如 private string value privat
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • 如何在实际示例中使用 javascript 模块模式?

    我正在尝试理解 JavaScript 模块模式 我已经看过它应该是什么样子的示例 但我不明白如何使用它 例如 这里发生了一些事情 input share on click function loading html img class re
  • 无论大小如何,如何使项目保持在屏幕中央? [复制]

    这个问题在这里已经有答案了 我试图使这些框在屏幕上水平居中 无论视口的面积是多少 但我似乎无法做到这一点 如果有人可以提供帮助 我将不胜感激 div class jobFields div class field 1 div div cla
  • AngularJS - 触发控制器时获取先前的路线

    Angular 的内部结构再次让我困惑 我需要在加载特定视图时确定之前的路线 我就是这样做的 app controller TrashCtrl function scope rootScope rootScope on locationCh
  • 使用 Winsock 通过单个 UDP 服务器处理 10 个客户端

    我已经使用 UDP 套接字建立了一个服务器 客户端应用程序 但我的服务器无法一次处理多个客户端 现在我想修改我的应用程序 让 10 个客户端分别运行在不同的计算机上 而我的服务器运行在单独的计算机上 我希望我的服务器能够与 10 个不同机器
  • jquery.ui.touch.punch.js 脚本阻止触摸设备上的输入功能

    我花了一点时间 但我发现我无法单击我的输入 因为我使用 touch punch 脚本在触摸设备上启用 jquery UI 拖动功能 熟悉这个脚本的人知道为什么会这样吗 该表单实际上位于父对象的树中 有谁知道我可以覆盖或强制选择的方法吗 我现
  • 如何通过URL获取RouteData?

    我需要得到RoutData通过 ASP NET MVC 应用程序中给定的 URL 字符串 我找到了我需要嘲笑的方式HttpContextBase基于我的 URL 字符串 然后将其传递给RouteTable Routes GetRouteDa
  • IEEE 754 浮点除法的可逆性

    IEEE 754 浮点除法的可逆性是什么 我的意思是标准是否保证如果double y 1 0 x then x 1 0 y i e x可以一点一点精确还原吗 时的情况y is infinity or NaN都是明显的例外 是的 有 IEEE
  • Delphi 6 表单设置为使用 poDesktopCenter 定位自身,最终出现在“扩展”监视器上

    我有一个 Delphi 6 应用程序 它在主窗体出现后启动向导 向导是一种模态形式 我的一位用户将其 Windows 桌面扩展到了多个显示器 在这种情况下 主窗体显示在主监视器上 向导显示在扩展监视器上 这会造成混乱 因为当他们尝试单击主窗
  • 为什么要将 NSObject 协议附加到协议实现中

    我看到一些类似于以下内容的代码 protocol MyProtocol
  • 如何查找数据框中各组之间共享的值? [复制]

    这个问题在这里已经有答案了 我有一个整洁的 data frame 有两列 exp and val 我想找出哪些值val在所有不同的实验之间共享 df lt data frame exp c A A A A B B B B C C C C v
  • 找不到符号类“Builder”

    我最近下载了Android Studio 我认为它比eclipse 我创建了一个新项目 其中包含登录活动 但该活动似乎有错误 在此处输入图像描述 1 Error 78 31 error cannot find symbol class Bu
  • 递归读取文件夹并对每个文件夹执行命令

    我试图递归到文件夹 然后使用 bash 脚本在它们上运行命令 有什么建议么 如果您想递归到目录 对其中找到的每个文件执行命令 我会使用find我认为 命令 而不是使用 shell 脚本编写任何内容 该命令可以接收很多参数 例如type过滤返
  • XNA Content.Load 如何操作?

    我只是好奇它是否在每次调用时实际上将资源加载到内存中 或者如果它查找它 发现它是否已加载 如果未加载 则加载一次并仅保留引用 以便第二次调用它只是获取对它的引用 它会跟踪已加载的内容 并且如果之前已加载过该对象 则仅返回对同一对象的引用 这
  • OpenCV 和 Python - 图像太大而无法显示

    我的图像尺寸为 6400 3200 而我的屏幕为 1280 x 800 因此 仅需要调整图像大小以供显示 我正在使用 Python 和 OpenCV 2 4 9 根据OpenCV 文档 http docs opencv org 2 4 mo
  • Docker-compose 异常

    溢出 我尝试将 docker compose 脚本从我的 ubuntu 工作站传输到我的 Fedora 笔记本电脑 当击中时 docker compose up 我得到以下异常 polito localhost dev docker com
  • 为什么 Android Studio 无法引用仅包含在 build.gradle 中的库?

    在我的应用程序中 我使用 Guava 库 我在我的文章中引用了它build gradle文件仅如下 dependencies compile com google guava guava 13 0 1 我的应用程序重建并运行良好 然而 当我
  • 使用条件运算符时没有隐式转换[重复]

    这个问题在这里已经有答案了 我有以下课程 abstract class AClass class Foo AClass class Bar AClass 当我尝试使用它们时 AClass myInstance myInstance true
  • 通过拖放到批处理文件上运行命令

    我想将文件拖放到批处理文件上 以便对其运行以下命令 如何在删除的文件上运行命令 PotreeConverter exe
  • 如何在 OpenShift 上部署多模块 Maven Spring Boot 应用程序

    我有一个要部署的多模块 spring boot 项目开放式换档 https www openshift com 我也在那里安装了 Jenkins 源代码托管在 Github 上 每个模块都包含一场战争 以便拥有微服务结构
  • C++ 冒泡排序双向链表

    我知道冒泡排序可能不是最快的方法 但它是可以接受的 我只是在将算法调整为数组中的双链接列表时遇到麻烦 我的双链表有一个 int 类型和一个 string 类型来保存数字和单词 我的列表是用插入排序来排序的 我编写了该插入排序来按字母顺序排序