将 Unix Sort 命令转换为快速排序

标签 c unix sorting cmd quicksort

我在一个 C 文件中有一个命令 sort -n +1 -2 -o/tmp/ord_id ,我使用系统调用该命令,这非常糟糕。我将如何创建一个快速排序函数来完成与 unix 命令相同的任务?该命令的调用方式如下:

static const char sortcmd[] = "sort -n +1 -2 -o /tmp/ord_id "; //dec during function
//later in the function
bu_vls_strcpy(&cmd, sortcmd); //ONLY NEED TO FIX THIS COMMAND
bu_vls_strcat(&cmd, argv[1]);
bu_vls_printf(&gedp->ged_result_str, "%V\n", &cmd);
(void)system( bu_vls_addr(&cmd) );

bu_vls 函数是在程序中预定义的,因此可以将它们视为通常的字符串函数。我评论了调用出现的代码行,任何提示或代码都表示赞赏(这不是家庭作业,独立项目!)

最佳答案

有几个步骤:

  1. 读入文件(假设为 argv[1])
  2. (可选)使用与排序相同的规则解析它以查找 +1 -2 选择的字段。
  3. 编写一个排序谓词,以通过对数字(来自 -n)参数进行数字排序来实现排序。这要么对整行进行操作(如果您跳过了第 2 步),要么对您创建的用于表示已解析行的结构进行操作。
  4. 调用qsort
  5. 按排序顺序写出数据。

关于将 Unix Sort 命令转换为快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13591041/

相关文章:

python - 对具有多个属性的列表进行排序的 pythonic 方法是什么,这样第一个被反向排序而第二个不是?

java - 为什么我的程序在打印 letterList 数组时会跳过数字?它只打印出 A-Z 和 a-z

c - 如何将结构中的多个 void 指针取消引用到 1 block 内存中?

c++ - 用 C 和 C++ 编写代码的不同值(value)观

c - 尝试实现enable_execute_stack (Mac OS X)

linux - 在单个 Linux 命令操作系统脚本中使用某些条件重命名多个文件夹中的所有文件。

c - ANSI C 中的字符串处理

linux - 八进制数字0权限的用途是什么

unix - 水平合并两个文件并格式化

list - 在 Flutter/Dart 中映射多个列表?