快速排序特殊情况 - 似乎是 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 的错误算法 的相关文章

  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • 有没有更好的方法来获取每个项目与谓词匹配的子序列?

    假设我有一个 IEnumerable 例如 2 1 42 0 9 6 5 3 8 我需要获得与谓词匹配的项目的 运行 例如 如果我的谓词是 bool isSmallerThanSix int number 我想得到以下输出 2 1 0 5
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • 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