快速排序特殊情况 - 似乎是 K&R 的错误算法

2024-03-19

我在理解 K&R 的快速排序算法(没有指针的简化版本)时遇到问题。 Dave Gamble 已经在这里提供了详尽的解释解释 https://stackoverflow.com/questions/1231254/kr-qsort-example-with-pointers-and-arrays-confusion。 然而我注意到,从稍微改变的字符串开始,我们在 for 循环的许多循环中都无法获得交换。 首先是代码:

void qsort(int v[], int left, int right)
{
    int i, last;

    void swap(int v[], int i, int j);

    if (left >= right) /* do nothing if array contains */
            return;         /* fewer than two elements */
    swap(v, left, (left + right)/2); /* move partition elem */
    last = left;                    /* to v[0] */
    for (i = left + 1; i <= right; i++) /* partition */
            if (v[i] < v[left])
                    swap(v, ++last, i);
    swap(v, left, last);                  /* restore partition elem */
    qsort(v, left, last-1);
    qsort(v, last+1, right);
}

我认为的演练:

我们从 CADBE 开始;左=0;右=4; D 是枢轴 所以根据算法我们将D与C交换得到DACBE

最后=左=0

我 = 1 如果 ( v1 https://stackoverflow.com/questions/1231254/kr-qsort-example-with-pointers-and-arrays-confusion1(因为最后一个在操作之前递增)与 v1 https://stackoverflow.com/questions/1231254/kr-qsort-example-with-pointers-and-arrays-confusion所以没有任何变化,last = 1,仍然有 DACBE;

现在 i = 2 if ( v[2] true 所以我们将 v[2] 与 v[2] 交换,一切都没有改变;最后 = 2

现在 i = 3 if ( v[3] true 所以我们用 v[3] 交换 v[3] 没有任何改变(!),最后 = 3

所以显然出了问题,算法什么也没做。 非常感谢您的意见。我一定是错的,作者比我好;D 提前致谢!


循环从left + 1 up to 并包括 right. When i=4,测试失败并且last不会增加。

然后递归调用排序BACDE with left=0,right=2 and left=4,right=4。 (当D是枢轴。)

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

快速排序特殊情况 - 似乎是 K&R 的错误算法 的相关文章

  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj

随机推荐

  • JavaScript 简写 if 语句,没有 else 部分

    所以我使用的是 JavaScript 简写if else声明 我在某处读到它们被称为三元声明 this dragHandle hasClass handle low direction left direction right 这很好用 但
  • 关于 Hinnant 堆栈分配器的问题

    我一直在使用霍华德辛南特的堆栈分配器 http howardhinnant github io stack alloc h它的工作方式就像一个魅力 但实施的一些细节对我来说有点不清楚 为什么全球运营商new and delete用过的 这a
  • BX 滑块和滚动页面

    我正在将 bxslider 用于移动网站 水平滚动图像 问题是 如果您触摸 bxslider 页面不会滚动 如何捕捉手指方向并向下滚动页面 谢谢 您可以将选项 touchEnabled 设置为 false
  • return 语句中的解构[重复]

    这个问题在这里已经有答案了 我的应用程序中有多个案例 如下所示 getVariables const allowCustomValues budgets budgetsToAdd budgetsToRemove isGlobal isReq
  • 过滤器“woocommerce_cart_contents_weight”不适用于运输重量

    我试图将包裹重量计入购物车的总重量 以便我可以收取正确的运费 我尝试在 woocommerce cart contents weight 上添加过滤器 如所解释的there https stackoverflow com questions
  • C# 调试问题:没有为任何调用堆栈帧加载符号

    我正在尝试从 C Web 服务 dll 进入外部 dll 中引用的方法 我正在开发 Web 服务代码 可以从我的 Winforms 应用程序进入它 我试图从网络服务进入的 dll 是由其他人开发的 我有 dll 和 pdb 文件 当我尝试进
  • 没有 XML Spring ApplicationContext

    我正在尝试创建一个带有或不带有 spring xml 配置的项目 首先 我像这样创建 xml 配置
  • Java FX 中的嵌套控制器问题

    我试图包括控制器 SelectedIssueController 在我的主要布局 main fxml 但我收到以下错误 Can not set lt mypackage controllers SelectedIssueController
  • 使用 C# 禁用窗口动画效果

    我试图禁用窗口中的 淡入淡出 动画 每当您打开或最大化 最小化窗口时就会发生这种动画 当然 可以通过取消选中复选框来手动完成最小化和最大化时为窗口设置动画 我正在尝试通过系统参数信息 https msdn microsoft com en
  • Plotly:同一图中的散点图和动画线图

    我需要在绘图中创建一个散点图 并在其上覆盖一个线图 我发现如果我使用图形对象创建图形 然后使用绘图表达添加数据 我可以做到这一点 scatter px scatter line px line fig go Figure data scat
  • 如何删除未加权有向图中的循环,以使边数最大化?

    令 G 为包含环的未加权有向图 我正在寻找一种算法 它可以找到 创建所有非循环图 G 由 G 中的所有顶点和 G 的边子集组成 足够小以使 G 非循环 更正式 所需的算法消耗 G 并创建一组非循环图 S 其中 S 中的每个图 G 满足以下属
  • 将 HashMap 序列化为 JSON 字符串,同时避免 Java 中的某些字段

    我有一张地图如下 Map map new HashMap
  • Django filter_horizo​​ntal 形式

    在管理定义属性filter horizo ntal中可以指定 使用 ManyToMany 字段的小部件创建很酷的 javascript 我 想在我的模型表单中使用这样的小部件 我该如何指定这一点 http www hoboes com Mi
  • vuetify中如何防止canvas溢出卡并使其响应?

    Context 您好 我正在尝试在 vuetify 中使用 Fabricjs Canvas 并使其在所有屏幕中看起来响应灵敏 但目前 我面临一个问题 画布没有根据卡片重新调整大小 而是溢出了卡片 我尝试过使用 v responsive 但它
  • 从jsp中合并表单对象时,Spring mvc丢失依赖集合的id

    我有以下控制器返回视图 RequestMapping value admin adminUsers method RequestMethod GET public String adminUsers ModelMap model HttpS
  • Google Contacts API 查询 n 个热门联系人

    有没有办法只查询n个热门联系人 例如 http www google com m8 feeds contacts default full alt json max results 50 popular true 这只会返回 50 个热门联
  • 你如何确定什么是压倒你的风格的? [复制]

    这个问题在这里已经有答案了 当摆弄示例代码的样式时 我发现代码的样式将覆盖我的样式 因为它们将使用更高优先级的引用 例如 div class gt class 我会遇到这样的情况 我如何找出哪种风格覆盖了我的风格 我想避免使用 import
  • 获取 Parse.com JS 查询中每个字段的最新记录

    我的 Parse 数据库中有一个表 其中包含 validFrom 和 uniqueId 列 可以有多个记录具有相同的 uniqueId 如名称 我必须使用什么查询来获取给定的 uniqueId 集的具有最新 validFrom 的项目 我尝
  • O(n^2) 与 O(n) 中的算法 [重复]

    这个问题在这里已经有答案了 我是计算机科学的新手 刚刚开始使用伪代码 我有一些问题 这是我这个学期的第三周 大部分时间都是自学 我有一些疑问 O n 2 与 O n 算法有什么区别 同样 O n log n 是什么 和 n 2 到目前为止
  • 快速排序特殊情况 - 似乎是 K&R 的错误算法

    我在理解 K R 的快速排序算法 没有指针的简化版本 时遇到问题 Dave Gamble 已经在这里提供了详尽的解释解释 https stackoverflow com questions 1231254 kr qsort example