如何使用以下规则集(?)对此特定字符串数组进行排序:

时间:2014-03-31 01:54:25

标签: c

是的,我是新手,我的叔叔挑战我使用这个功能:

void sortStrings(char str[], const char* delim){...}

以某种方式对给定的char数组 str 进行排序, str 中显示的每个字符都将分隔一组字符在 str 中,从而使它们成为您需要按十六进制值排序的单词。在此过程中,我还需要将 delim 中的字符分隔为&#39 ;;'。

规则是:我可能只使用库<stdio.h>而我无法使用malloc / realloc。 显然这应该用n ^ 2的符号来表示(n是str中的单词数量,而不是字符)

这是输入和输出的一个例子:

输入

char str [] =&#34; aaa * test,hello.world * abcd.zzz&#34 ;; sortDelim(str,&#34;,。*&#34;)

输出: str现在是:&#34; aaa; abcd; hello; test; world; zzz&#34;

嗯,我现在最终管理了它,泡泡排序的东西有点帮助了这个问题:) 注意:我会留下这个帖子,以防有人想对自己采取这个挑战吗?这很容易我保证:P如果您认为我应该删除它或添加完成的代码,那么请问(请不要再扣除我的代表&gt;&lt;)

1 个答案:

答案 0 :(得分:1)

你有一个良好的开端。在你的第二个for循环之后你有

  1. 用分号替换所有分隔符
  2. 你知道有多少单词,size
  3. 你知道每个单词有多少个字母,letters
  4. 一个观察结果是您已将letters分配为1000个条目。这似乎已经足够了,但它真的吗?你怎么知道str中有多少单词?你没有。并且你不能使用malloc动态分配,所以你可能需要寻找一个不需要查找表的算法吗?您需要一个有效in place

    的算法

    http://en.wikipedia.org/wiki/In-place_algorithm

    下一步是什么?你需要对单词进行排序。有许多排序算法。你想要一些简单的东西,并且允许复杂度为O(n ^ 2)。这是一个排序算法列表:

    http://en.wikipedia.org/wiki/Sorting_algorithm

    请注意,在表格中,在“其他注释”下,它告诉您某些算法是“微小的代码大小”,听起来不错。首先按“其他注释”排序表,然后按“平均”复杂度排序(单击列标题中的三角形)。您现在有两种算法使用方法“交换”(即in place),Tiny code size和平均复杂度O(n ^ 2),这些维基百科链接解释了它们的工作原理,并包含{{ 3}}让你开始:

    选择并尝试一下。

    提示:如果第一个单词比第二个单词大,则可能需要一个子程序来交换(交换)两个连续的单词。这可以in place完成。

    假设你有

    abcd;aaa
    

    第一个单词大于第二个单词,你需要检测到它,并交换单词以便最终得到

    aaa;abcd
    

    这是一个可以为您提供一般概念的图表。

    enter image description here