在c中对二维数组进行排序

2024-01-28

我正在尝试对二维数组进行排序。原始数组是

5 0 3
4 1 2
3 1 1
4 2 2
3 3 1

排序后,应该是这样的

3 1 1
3 3 1
4 2 2
4 1 2
5 0 3

这是我用来尝试实现冒泡排序的代码,i 代表行数。

int x,y,z,j,temp1,temp2,temp3;
for(x=0;x<i;x++)
{
    for (j=0;j<i-1;j++)
    {
        if(a[j][0]>a[j+1][0])
        {
            temp1=a[j][0];
            temp2=a[j][1];
            temp3=a[j][2];
            a[j][0]=a[j+1][0];
            a[j][1]=a[j+1][1];
            a[j][2]=a[j+1][2];
            a[j+1][0]=temp1;
            a[j+1][1]=temp2;
            a[j+1][2]=temp3;
        }
    }
}

它仍然没有排序,任何帮助将不胜感激。


看起来您正在尝试对数组中的行进行排序字典顺序 http://en.wikipedia.org/wiki/Lexicographical_order。如果将二维数组视为数组的数组,那么您只需将第一级数组中的第二级数组按字典升序排序。

根据数组中的列数是否固定,您也许可以使用qsort具有自定义比较器的功能。例如,如果您知道每列中始终恰好有 3 个元素,则可以编写如下所示的比较器:

static const size_t NUM_COLS = 3;

/* Lexicographically compare two arrays of size NUM_COLS. */
int CompareArrays(const void* arr1, const void* arr2) {
     /* Convert back to the proper type. */
     const int* one = (const int*) arr1;
     const int* two = (const int*) arr2;

     /* Do an element-by-element comparison.  If a mismatch is found, report how
      * the arrays compare against one another.
      */
     for (size_t i = 0; i < NUM_COLS; i++) {
         if (one[i] < two[i]) return -1;
         if (one[i] > two[i]) return +1;
     }

     /* If we get here, the arrays are equal to one another. */
     return 0;
}

/* Use qsort to sort the arrays */
qsort((const int*)&one, numRows, sizeof(int[NUM_COLS]), CompareArrays);

希望这可以帮助!

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

在c中对二维数组进行排序 的相关文章

随机推荐

  • 尝试使用 java EventHubClient API 将事件发送到 Azure 事件中心时出现“连接中止”错误

    我正在尝试编写一个java发布程序 以向事件中心发送一条消息 但是 当我尝试执行它时 我收到连接中止错误 我正在使用下面的链接 azure eventhubs 和0 9 0版本中指定的maven依赖项下面是我试图遵循的链接和主要方法 htt
  • SQLiteException:从数据库读取时无法识别的标记

    我已经在应用程序内创建了一个 SQLite 数据库 填充了它 现在我尝试从中读取数据 该应用程序不断崩溃 这是我收到的 logcat 12 30 05 53 18 008 E AndroidRuntime 6205 java lang Ru
  • Linux 上应用程序数据(非用户特定)的存储位置

    In my OSGi https en wikipedia org wiki OSGi基于 Java 应用程序 我正在开发一个捆绑包 为系统的其余部分提供对文件系统的访问权限 除了提供对用户主目录的访问之外 我还希望提供对非用户特定区域的访
  • 让背景颜色延伸到溢出区域

    如果总计内容高度父级的大小是 10 000px 但overflow auto元素是rendered高度为 700px 我如何强制aside子元素动态渲染为 10 000pxinstead默认 700px 当您开始滚动时 您可以看到白色背景小
  • 从图表中获取文本格式的路径

    在我的图表中 我有如下数据 这里 a b c d 是节点 r1 r2 r3 r4 是关系 a r1 gt b b r2 gt a b r2 gt c c r1 gt b d r3 gt a a r1 gt d like this 我正在使用
  • Xcode 7.0 启动图像集“LaunchImage”有 2 个未分配的子项

    我刚刚将 xcode 更新到 7 0 并修复了大部分错误 但我不断收到此错误消息 启动图像集 LaunchImage 有 2 个未分配的子项 我已经删除了两个未分配的子项 但仍然收到此错误消息 尝试深层清洁Xcode 命令 alt shif
  • 有两个输入的表单未提交?

    有人可以解释一下为什么这段代码不起作用 form on submit function e e preventDefault var first first val var next next val alert first next ht
  • 数据库中的原子比较和交换

    我正在研究工作排队解决方案 我想查询数据库中的给定行 其中状态列具有特定值 修改该值并返回该行 并且我想以原子方式执行此操作 以便其他查询不会看到它 begin transaction select from table where pk
  • 如何将我的数据随机分成不同的小批量 [JULIA]

    我有一个包含 100000 个示例的数据向量 值为 1 和 1 我想从这个数据中得到16 个不同的小批量随机 每6250个 这是我的代码 用于生成 100000 个示例的向量 并将其存储在文件中 Dan 回答了如何将我的数据划分为不同部分的
  • Reporting Services 2005 部署错误:无法加载文件或程序集

    我制作了一份关于 Reporting Services 2005 的报告 该报告使用外部程序集 我将该程序集添加到项目中 报告 报告属性 参考 我还将程序集复制到文件夹中 C Program Files Microsoft SQL Serv
  • hive 在一定数量后自动递增

    我需要将数据插入目标表 其中除代理键列外 所有列都应从不同的源表填充 它应该是目标表的最大值加上从 1 开始的自动增量值 我可以使用 row number 函数生成自动增量值 但在同一个查询中 我应该如何从目标表获取代理键的最大值 HIVE
  • Windows Metro 应用程序中的 CollectionViewSource

    我有一个集合 我需要 3 个不同的视图1 收集所有数据2 分组数据 分组标准将在应用程序生命周期中修改 3 过滤数据 过滤条件将在应用生命周期中修改 我想要的是所有视图都应该绑定到同一个集合 以便对集合的任何更改都应该同步到所有视图 对于
  • 访问 Service Fabric 中的文件系统

    当我从服务总线队列收到新消息时 我需要在 Service Fabric 服务中使用 ffmpeg 对视频进行编码 我可以从资源中提取 ffmpeg exe 并运行它 但我可以将输入 输出视频文件保存在内部文件系统中吗 我通过以下代码在本地集
  • 用于监视下载文件夹添加内容的批处理文件

    我需要一个批处理文件来监视 下载 文件夹中的添加内容 但仅限于新添加的内容 像这样的事情 START NumOldFiles GetNumberOfFilesOld Delay 30 Seconds NumNewFiles GetNumbe
  • ec2 API 如何决定哪个可用区?

    我正在编写一项服务 该服务可以根据需要以编程方式启动 EC2 实例 我想给它最好的机会能够随时启动实例 最大限度地减少由于容量不足而导致的失败 实例在一个区域内的哪个可用区中运行并不重要 重要的是我有最好的机会启动实例 我想知道 如果我在使
  • 什么正则表达式模式将匹配包含某些字符的整个单词?

    我想匹配包含某些字母 字符的整个单词 例如 该模式将匹配包含该字母的所有单词l and a 例如car patrol left等等 但它不会匹配这样的词boom turnover digit etc 像这样的模式应该有效 b w al w
  • Java中多项式x^16 + x^12 + x^5 + 1计算CCITT标准CRC

    我需要帮助在 Java 中使用多项式 x 16 x 12 x 5 1 0x1081 计算 CCITT 标准 CRC 我在互联网上尝试了很多示例 但每个示例都返回与示例中不同的值 例如 对于此数组 0xFC 05 11 结果需要为 27 56
  • Android:有什么好的解决方案如何验证编辑框

    例如 我想要验证最小长度 如果是Email a PhoneNumber 这在安卓中怎么可能 我想验证一下 如果您想阻止用户输入某些内容 请扩展InputFilter并将其注册到您的EditText built in InputFilter
  • 如何使用 TWGL(WebGL 辅助库)绘制 2D 图像

    有很多关于如何使用 TWGL 绘制 3D 内容的示例https github com greggman twgl js tree master examples https github com greggman twgl js tree
  • 在c中对二维数组进行排序

    我正在尝试对二维数组进行排序 原始数组是 5 0 3 4 1 2 3 1 1 4 2 2 3 3 1 排序后 应该是这样的 3 1 1 3 3 1 4 2 2 4 1 2 5 0 3 这是我用来尝试实现冒泡排序的代码 i 代表行数 int