一个很好的参考卡/备忘单,其中包含 C 语言的基本排序算法? [关闭]

2023-12-26

我一直在寻找(没有太大运气)带有 C 语言(或者可能是伪代码)中的所有基本排序算法的完美参考卡。维基百科是一个很棒的信息来源,但这次我正在寻找一些绝对更便携的东西(如果可能的话口袋大小),当然还有可打印的东西。任何建议将不胜感激!


这是我为一个学习 C 的朋友做的,也许你会发现它有帮助:

#include <stdlib.h>
#include <string.h>

static void swap(int *a, int *b) {
    if (a != b) {
        int c = *a;
        *a = *b;
        *b = c;
    }
}

void bubblesort(int *a, int l) {
    int i, j;

    for (i = l - 2; i >= 0; i--)
        for (j = i; j < l - 1 && a[j] > a[j + 1]; j++)
            swap(a + j, a + j + 1);
}

void selectionsort(int *a, int l) {
    int i, j, k;
    for (i = 0; i < l; i++) {
        for (j = (k = i) + 1; j < l; j++)
            if (a[j] < a[k])
                k = j;
        swap(a + i, a + k);
    }
}

static void hsort_helper(int *a, int i, int l) {
    int j;

    for (j = 2 * i + 1; j < l; i = j, j = 2 * j + 1)
        if (a[i] < a[j])
            if (j + 1 < l && a[j] < a[j + 1])
                swap(a + i, a + ++j);
            else
                swap(a + i, a + j);
        else if (j + 1 < l && a[i] < a[j + 1])
            swap(a + i, a + ++j);
        else
            break;
}

void heapsort(int *a, int l) {
    int i;

    for (i = (l - 2) / 2; i >= 0; i--)
        hsort_helper(a, i, l);

    while (l-- > 0) {
        swap(a, a + l);
        hsort_helper(a, 0, l);
    }
}

static void msort_helper(int *a, int *b, int l) {
    int i, j, k, m;

    switch (l) {
        case 1:
            a[0] = b[0];
        case 0:
            return;
    }

    m = l / 2;
    msort_helper(b, a, m);
    msort_helper(b + m, a + m, l - m);
    for (i = 0, j = 0, k = m; i < l; i++)
        a[i] = b[j < m && !(k < l && b[j] > b[k]) ? j++ : k++];
}

void mergesort(int *a, int l) {
    int *b;

    if (l < 0)
        return;

    b = malloc(l * sizeof(int));
    memcpy(b, a, l * sizeof(int));
    msort_helper(a, b, l);
    free(b);
}

static int pivot(int *a, int l) {
    int i, j;

    for (i = j = 1; i < l; i++)
        if (a[i] <= a[0])
            swap(a + i, a + j++);

    swap(a, a + j - 1);

    return j;
}

void quicksort(int *a, int l) {
    int m;

    if (l <= 1)
        return;

    m = pivot(a, l);
    quicksort(a, m - 1);
    quicksort(a + m, l - m);
}

struct node {
    int value;
    struct node *left, *right;
};

void btreesort(int *a, int l) {
    int i;
    struct node *root = NULL, **ptr;

    for (i = 0; i < l; i++) {
        for (ptr = &root; *ptr;)
            ptr = a[i] < (*ptr)->value ? &(*ptr)->left : &(*ptr)->right;
        *ptr = malloc(sizeof(struct node));
        **ptr = (struct node){.value = a[i]};
    }

    for (i = 0; i < l; i++) {
        struct node *node;
        for (ptr = &root; (*ptr)->left; ptr = &(*ptr)->left);
        a[i] = (*ptr)->value;
        node = (*ptr)->right;
        free(*ptr);
        (*ptr) = node;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个很好的参考卡/备忘单,其中包含 C 语言的基本排序算法? [关闭] 的相关文章

  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • std::bind 重载解析

    下面的代码工作正常 include
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况

随机推荐

  • 使用 MigrationHistory 检测实体框架模型对于数据库是否太旧

    我们从手动编码数据库迁移转向代码优先的实体框架迁移 在我们的旧设置中 我们能够检查数据库是否太新 这很重要 因为它可能不兼容 不幸的是 我找不到一个好的方法来检查当前数据库的最新程度或是否太旧 用例是客户的计算机上有我们软件的 2 个版本
  • 自动找出 f# 中的函数名称

    如果我有一个属于模块一部分的函数 并且我想要在函数内部有一个日志条目 我必须手动打印函数名称空间和名称 例如 namespace MyModuleNamespace module MyModule let AddTwoNums logger
  • 我应该授权哪个 URL 在防火墙后面使用 pip?

    我有一台服务器 我想在其上使用 Python 该服务器位于公司防火墙后面 我不想搞乱它 我唯一能做的就是为特定的 URL 域设置防火墙例外 我还想使用 pip 或 easy install 访问 PYPI 上的包 因此 您知道除了 pypi
  • DOS批处理脚本转换字符串2十六进制

    如何在 DOS 批处理脚本中将字符串转换为十六进制 例如 将 abcd 转换为 61626364 因为 a 是 0x61 我尝试从网络上寻找解决方案 一天 但找不到我的答案 echo off setlocal EnableDelayedEx
  • 准备继续查看控制器时发生致命错误

    我目前正在得到一个解包可选值时意外发现致命错误在 destViewController titleLabel text 测试 Segue 由于当它转向 Seconds ViewController 时出现错误 我该如何修复它 如何避免在 t
  • gson json解析器:没有键的值

    我想解析这样的 json 结构 response arr1 count arr2 count 如果 count 有键 count 例如 则一切正常 但钥匙是空白的 有什么方法可以映射此结构并仅手动检索此值 或者我需要自己在没有 gson 的
  • yii2 登录重定向后丢失用户身份

    我看过其他类似的问题 而这个问题 页面重定向后 Yii2 用户身份丢失 https stackoverflow com questions 27738175 yii2 user identity loss after page redire
  • 如何创建一个基于文本内容动态宽度的div框? [复制]

    这个问题在这里已经有答案了 我想创建一个简单的div根据所包含的内容缩小和扩展 https jsfiddle net qa5dr0x8 https jsfiddle net qa5dr0x8 div style border 1px sol
  • 如何在 Eclipse 中关闭制表符和换行符标记?

    我正在使用 Adob e 的 ColdFusion Builder 这是一个构建在 Aptana 之上的基于 Eclipse 的 IDE 突然间 我的 Eclipse 编辑器中显示了一种空白标记 我一定是不小心按下了组合键 这是一个屏幕转储
  • 枚举 Delphi 中已发布的属性和子属性

    如果之前问过这个问题 我们深表歉意 我对一些组件的定义如下 如果错误请指导我 因为我是初学者 我正在尝试的是枚举派生组件的所有已发布属性 特别是子属性 我能够枚举属性的名称 但是 是否可以枚举在程序执行期间可以访问其元素 如子属性 的已发布
  • 如何验证字符串是否是js中的有效日期[重复]

    这个问题在这里已经有答案了 我有用于获取不同值的字符串字段 收到的一些值是日期 现在我需要检查收到的值是否是日期 收到的日期可以再次采用不同的格式 I tried Date parse 如果格式为dd mm yyyy hh mm 但我收到了
  • Android Studio中Toolbar必须用AppBarLayout包裹吗?

    代码A来自项目建筑样本 https github com android architecture samples 工具栏被 AppBarLayout 包裹 我删除 AppBarLayout 并获得代码 B 代码 B 与代码 A 一样运行良
  • Flutter:一页上有两 (2) 个抽屉?

    我有一个顶部栏 左侧 设置 和右侧 配置文件 都有图标 我需要一个抽屉 根据单击的图标从左侧或右侧滑出 我的左侧 设置 工作正常 但我不明白如何在一页上有两个抽屉 我相信拥有两个抽屉比根据所选链接以编程方式编辑抽屉更有意义 但我以前也经常犯
  • GestureDetector.onTouchEvent(MotionEvent e) 在所有手势上调用 onLongPress

    我有一个自定义视图 我想在其上设置长按监听器 我正在使用以下代码来设置相同的内容 final GestureDetector gestureDetector new GestureDetector new GestureDetector S
  • Html.HiddenFor 在 ASP.NET 中错误地格式化 DateTime

    我正在用 C 编写 ASP NET MVC3 应用程序 并发现调用Html HiddenFor在我看来会呈现DateTime与我打电话时不同 且错误 Html DisplayFor 它从中获取值的模型确实有一个 DisplayFormat
  • Linq to SQL 的未来是什么

    我一直在网上搜索 Linq 教程 发现一些文章说 linq 可能会消失 你对此有什么看法 微软真的会废除linq吗 Linq to SQL 并没有像实体框架那样受到足够多的关注来发展其功能 MS 已决定追求丰富 发展 EF 对于 L2S 这
  • 为什么在 UI 中使用 DataTable 是错误的?

    我是初学者 我发现很难理解这里的一个概念 有人告诉我不应该在 UI 级别使用 DataTable 请帮助我理解这个概念 解决方案 MyApp Data MyApp Logic MyApp Web MyApp Web 引用 MyApp Log
  • Observer.onError 触发不一致

    我正在使用 Retrofit 访问我的 API 如下所示 public interface UserService POST user login public Observable
  • Libgdx 和 Box2DLights - 太亮 + 颜色变灰

    我正在使用 LibGDX 和 Box2DLights 编写一个游戏来进行照明 第一个问题是当我的灯光相互重叠时 我在太阳上有定向光 在角色上有点光 当它们重叠时 输出颜色太亮 我尝试改变灯光的颜色 但是当只有一盏灯 太暗 时 降低这些颜色会
  • 一个很好的参考卡/备忘单,其中包含 C 语言的基本排序算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在寻找 没有太大运气 带有 C 语言 或者可能是伪代码 中的所有基本排序算法的完美参考卡 维基百科是一个很棒的信息来源 但这次我